停止背景服务音乐

时间:2011-10-01 14:15:04

标签: android background playback

package com.falling.inairproandmark;



import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class BackgroundSoundService extends Service {
    private static final String TAG = null;
    MediaPlayer player;
    public IBinder onBind(Intent arg0) {

    return null;
}
@Override
public void onCreate() {
    super.onCreate();


    player = MediaPlayer.create(this, R.raw.bgmusic);

    player.setVolume(100,100);

}
public int onStartCommand(Intent intent, int flags, int startId) {


    player.start();

    return 1;
}

public void onStart(Intent intent, int startId) {
    // TODO



}
public IBinder onUnBind(Intent arg0) {
    // TODO Auto-generated method stub

    return null;
}

public void onStop() {

}
public void onPause() {

}
@Override
public void onDestroy() {

    player.stop();
    player.release();
}

@Override
public void onLowMemory() {

    }
}

我不太了解编码... 但我正在努力做的是通过音乐播放音乐。

假设我有10个活动...我希望音乐在我通过它们时播放,当我接到电话或通过按Home键退出应用程序时...音乐停止或至少暂停...如何我这样做了吗?

由于

瓦希德

1 个答案:

答案 0 :(得分:3)

您需要在onStartCommand()中启动单独的服务(同一服务的清单中的不同意图过滤器),您将检查意图的操作,即操作是否与您指定的操作具有相同的值清单文件中的intent操作,如果操作与intent filter操作名称匹配,则只需停止该服务。

我的一个项目示例:

在清单文件中:

<service android:name=".MyPlayerService" android:permission="android.permission.MODIFY_AUDIO_SETTINGS">        
      <intent-filter >
        .... some other filters
        <action android:name="com.my.player.EXIT"/>
        ....
        </intent-filter>   
      </service>

在onStartCommand()中: 在这里,我们可以看到需要指定动作名称,用于区分同一服务中的多个动作。

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    Log.i("ON START COMMAND", "Huston, we have a lift off!");

    if(intent.getAction().equals("com.my.player.EXIT")
             { // means that you have envoked action that will has to stop the service
                 MyPlayerService.this.stopSelf();   // See the note below
             }else if(//some other actions that has to be done on the service)

}

注意: 请注意,您只需使用.stop().pause()停止播放或暂停播放MediaPlayer,或者按照我上面提供的方式终止服务。

现在回到活动。抓住Home button并不是一个好主意。但是你可以在onDestroy()方法中做到这一点,其中活动不在栈中,即在它被销毁之前。在这里,您只需启动意图,即使服务停止工作。

示例:

Intent exit = new Intent("com.my.player.EXIT"); //intent filter has to be specified with the action name for the intent
this.startService(exit);

在Android Dev上了解有关stopSelf()的更多信息 如果你正在尝试这种方法,那么启动MediaPlayer的良好做法是让播放在intent过滤器中有自己的动作名称,并在onStartCommand()

中进行相同的检查。