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键退出应用程序时...音乐停止或至少暂停...如何我这样做了吗?
由于
瓦希德
答案 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()