日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android后台自播放音乐,Android实现后台播放音乐(Service方式)

發布時間:2023/12/15 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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方式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。