android后台自播放音乐,Android实现后台播放音乐(Service方式)
Android實現后臺播放音樂(Service方式)
實現:
在res文件夾下添加raw文件夾,添加mp3/4格式的音樂文件
注意命名規則只能是a-z,0-9,和下劃線_ 不能大寫字母和-
AndroidManifest.xml中
android:exported="false" >
android:exported是否支持其它應用調用當前組件
新建一個MusicService類繼承Service并且implements MediaPlayer.OnCompletionListener監聽播放完成事件
重寫service的onCreate()方法
private MediaPlayer mediaPlayer;
//Service初始化時調用
public void onCreate(){
super.onCreate();
//初始化時就創建一個MediaPlayer進行資源鏈接
mediaPlayer = MediaPlayer.create(this, R.raw.floating_clound);
mediaPlayer.setOnCompletionListener(this);
}
若只是想簡單的進行后臺播放
重寫onStartCommand 方法
@Override
public int onStartCommand (Intent intent,int flag, int startId) {
// TODO Auto-generated method stub
super.onStartCommand(intent,flag,startId);
if(!mediaPlayer.isPlaying()){
// 開始播放
mediaPlayer.start();
// 允許循環播放
mediaPlayer.setLooping(true);
}
return START_STICKY;
}
若想進行綁定
@Override
public IBinder onBind(Intent intent) {
if(!mediaPlayer.isPlaying()){
// 開始播放
mediaPlayer.start();
// 允許循環播放
mediaPlayer.setLooping(true);
}
return binder;
}
解除綁定
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
//松綁Service,會觸發onDestroy()
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
return super.onUnbind(intent);
}
重寫Ondestroy方法
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//先停止 再釋放
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
}
當Audio播放完的時候觸發該動作
/**
* 當Audio播放完的時候觸發該動作
*/
@Override
public void onCompletion(MediaPlayer player) {
// TODO Auto-generated method stub
// 結束Service
stopSelf();
}
并且寫一個類繼承Binder
class MyMusicBinder extends Binder{
//返回Service對象
MusicService getService(){
return MusicService.this;
}
}
在Activity中:
// 創建自定義的音樂Service對象
private MusicService musicService;
在Activity中創建一個private connector類 (連接服務的Client)監聽Service狀態的變化
private class MusicConnector implements ServiceConnection {
//成功綁定時調用 即bindService()執行成功同時返回非空Ibinder對象
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
musicService = ((MusicService.MyMusicBinder) iBinder).getService();
}
//不成功綁定時調用
@Override
public void onServiceDisconnected(ComponentName componentName) {
musicService = null;
Log.i("binding is fail", "binding is fail");
}
}
在點擊事件中:(點擊播放和暫停按鈕)
private View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Button btn = (Button) v;
try {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MusicService.class);
switch (btn.getId()) {
case R.id.play: {
conn= new MusicConnector();
bindService(intent, conn, Context.BIND_AUTO_CREATE);
break;
}
case R.id.pause: {
//結束Service
unbindService(conn);
break;
}
}
} catch (Exception e) {
}
}
};
音量相關:
通過AudioManager
AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
1 獲取最大媒體音量
int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
2 獲取當前音量
int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
3 漸進式調節音量
adjustStreamVolume (int streamType, int direction, int flags)
4 步進式調節:(直接調到那個音量):
setStreamVolume (int streamType, int index, int flags)
int streamType 需要調整的音量類型
(以下常量定義于AudioManager類中)
STREAM_ALARM 警報
STREAM_MUSIC 音樂回放即媒體音量
STREAM_NOTIFICATION 窗口頂部狀態欄Notification,
STREAM_RING 鈴聲
STREAM_SYSTEM 系統
STREAM_VOICE_CALL 通話
int direction 調整的方向,加或者減。(以下常量定義于AudioManager類中)
ADJUST_LOWER 降低音量
ADJUST_RAISE 升高音量
ADJUST_SAME 保持不變,這個主要用于向用戶展示當前的音量
int flags 附加的一些參數
FLAG_PLAY_SOUND 調整音量時播放聲音
FLAG_SHOW_UI 調整時顯示音量條,就是按音量鍵出現的那個
0表示什么也沒有
int index:
把音量調整到index值
報錯:leaked ServiceConnection
在Activity關閉的時候,沒有去關閉Service
解決: 在onDestroy() 方法中解除service的綁定(binding模式)或者stopService(非binding模式)
@Override
public void onDestroy(){
super.onDestroy();
unbindService(conn);
}
問題: 暫停音樂再重新播放會重頭開始
因為調用onbind又執行了onDestroy
具體的啟動情況有下:
1.當啟動時,單獨調用bindService方法,在unbindService后,會執行service的onUnbind,再執行onDestroy方法。
2.當啟動時,先調用startService,再調用bindService方法后,在unbindService后,會執行service的onUnbind,不會執行onDestroy方法。除非你在執行stopService.
3. 先調用startService,在調用stopService,會執行service的onDestroy方法
總結
以上是生活随笔為你收集整理的android后台自播放音乐,Android实现后台播放音乐(Service方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 早报:苹果自研芯片获得突破 抖音将上线全
- 下一篇: android framework,Gi