Вам нужно запустить отдельную службу (другой фильтр намерений в манифесте для той же услуги) в onStartCommand()
, вы проверите действие намерения, т. Е. Если значение действия совпадает с тем, которое вы указали для действия намерения в файле манифеста, и если действие соответствует имени действия фильтра намерений, просто остановите службу.
Пример из одного из моих проектов:
В файле манифеста:
<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)
}
Примечание:
Обратите внимание, что здесь вы можете просто остановить воспроизведение MediaPlayer или приостановить его, используя .stop()
или .pause()
, или просто прекратить обслуживание, как я предоставил выше.
Теперь вернемся к деятельности. Ловить 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, то хорошей практикой будет сделать так, чтобы игра имела свое собственное имя действия в фильтре намерений, и сделайте такую же проверку в onStartCommand()