Android播放音樂案例分享
本文實(shí)例為大家分享了Android播放音樂案例的具體實(shí)現(xiàn)代碼,供大家參考,具體內(nèi)容如下
效果:

分析:
和上一篇文章的結(jié)構(gòu)是一樣的,只不過我們需要在這里里面加上播放音樂的一些操作:
其實(shí)也就是調(diào)用系統(tǒng)的播放音樂的API而已,寫在服務(wù)里面就好,
//媒體播放器
private MediaPlayer player;
public void onCreate() {
File file=new File(Environment.getExternalStorageDirectory(),"a.mp3");
player =new MediaPlayer();
try {
//設(shè)置播放源
player.setDataSource(file.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
Log.d("fanfan", "onCreate");
super.onCreate();
}
public int onStartCommand(Intent intent, int flags, int startId) {
try {
//設(shè)置準(zhǔn)備資源監(jiān)聽器,當(dāng)資源準(zhǔn)備完畢,回調(diào)監(jiān)聽器的onPrepared函數(shù)
player.setOnPreparedListener(new OnPreparedListener() {
@Override
//準(zhǔn)備資源準(zhǔn)備好了會調(diào)用這個
public void onPrepared(MediaPlayer arg0) {
//播放音樂
player.start();
}
});
//準(zhǔn)備資源,好來播放音樂
//異步函數(shù),這個函數(shù)內(nèi)部會開啟一個子線程
player.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
Log.d("fanfan", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
public void onDestroy() {
//結(jié)束音樂
player.stop();
//釋放資源,如果播放下一首的話,就用不著釋放資源
player.release();
Log.d("fanfan", "onDestroy");
super.onDestroy();
}
第一步,照樣找個類來繼承服務(wù)類
package fry;
import java.io.File;
import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;
public class myService extends Service{
//媒體播放器
private MediaPlayer player;
/**
* 當(dāng)綁定這個服務(wù)的時候調(diào)用
*/
@Override
public IBinder onBind(Intent arg0) {
Log.d("fanfan", "onBind");
return null;
}
/**
* service被創(chuàng)建后調(diào)用
*/
@Override
public void onCreate() {
File file=new File(Environment.getExternalStorageDirectory(),"a.mp3");
player =new MediaPlayer();
try {
//設(shè)置播放源
player.setDataSource(file.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
Log.d("fanfan", "onCreate");
super.onCreate();
}
/**
* service被start后調(diào)用
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
try {
//設(shè)置準(zhǔn)備資源監(jiān)聽器,當(dāng)資源準(zhǔn)備完畢,回調(diào)監(jiān)聽器的onPrepared函數(shù)
player.setOnPreparedListener(new OnPreparedListener() {
@Override
//準(zhǔn)備資源準(zhǔn)備好了會調(diào)用這個
public void onPrepared(MediaPlayer arg0) {
//播放音樂
player.start();
}
});
//準(zhǔn)備資源,好來播放音樂
//異步函數(shù),這個函數(shù)內(nèi)部會開啟一個子線程
player.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
Log.d("fanfan", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
/**
* service被停止后調(diào)用
*/
@Override
public void onDestroy() {
//結(jié)束音樂
player.stop();
//釋放資源,如果播放下一首的話,就用不著釋放資源
player.release();
Log.d("fanfan", "onDestroy");
super.onDestroy();
}
}
第二步,該配置的監(jiān)聽服務(wù)也是要配置的
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.playMusic"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="fry.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="fry.Activity01" android:exported="true"></activity>
<service android:name="fry.myService">
</service>
</application>
</manifest>
第三步,播放或者結(jié)束音樂
package fry;
import com.example.playMusic.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class Activity01 extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity01);
}
public void onClick(View view){
Intent intent=new Intent();
intent.setClass(this, myService.class);
switch(view.getId()){
case R.id.btn_start://播放音樂,啟動服務(wù)
startService(intent);
break;
case R.id.btn_stop://結(jié)束音樂,停止服務(wù)
stopService(intent);
break;
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android sqlite cursor的遍歷實(shí)例詳解
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于Android sqlite cursor的遍歷的相關(guān)實(shí)例及知識點(diǎn),需要的朋友們可以學(xué)習(xí)下。2021-06-06
解決Android studio中關(guān)于模擬器的/data目錄不能顯示的問題
這篇文章主要介紹了解決Android studio中關(guān)于模擬器的/data目錄不能顯示的問題,主要原因還是我們權(quán)限不夠,當(dāng)前的用戶沒有權(quán)限訪問data目錄。具體解決方法大家跟隨腳本之家小編一起看看吧2018-06-06
RadioButton實(shí)現(xiàn)選擇后可取消選擇
這篇文章主要為大家詳細(xì)介紹了RadioButton實(shí)現(xiàn)選擇后可取消選擇,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08
Android編程實(shí)現(xiàn)只顯示圖片一部分的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)只顯示圖片一部分的方法,涉及Android針對圖片的局部顯示操作技巧,需要的朋友可以參考下2016-10-10
Android 用RxBinding與RxJava2實(shí)現(xiàn)短信驗(yàn)證碼倒計時功能
這篇文章主要介紹了Android 用RxBinding與RxJava2實(shí)現(xiàn)短信倒計時功能示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
Android 給RecyclerView添加分割線的具體步驟(分享)
下面小編就為大家?guī)硪黄狝ndroid 給RecyclerView添加分割線的具體步驟(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Android中使用Canvas繪制南丁格爾玫瑰圖(Nightingale rose diagram)
這篇文章主要介紹了Android中使用Canvas繪制南丁格爾玫瑰圖(Nightingale rose diagram),本文直接給出實(shí)現(xiàn)代碼和運(yùn)行效果圖,需要的朋友可以參考下2015-03-03

