gpt4 book ai didi

android - 通过最近的应用程序删除应用程序时停止服务

转载 作者:行者123 更新时间:2023-11-29 17:35:21 27 4
gpt4 key购买 nike

我开发了一个应用程序,即使在按下主页按钮或切换到另一个 Activity 后也能播放背景音乐服务。问题是当我通过最近的应用程序删除应用程序时 - 该服务仍在运行。

如何让我通过最近的应用程序删除应用程序时停止?有可能吗?

这是我的代码:

public class MixPage extends Activity {

private ToggleButton creekToggle;
SharedPreferences creekPref;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mix);

creekToggle = (ToggleButton) findViewById(R.id.creek);
creekPref = getSharedPreferences("creekPref", MODE_PRIVATE);
creekToggle.setChecked(creekPref.getBoolean("is creek on",false));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


public void playCreek(View view) {
// Is the toggle on?
boolean on = ((ToggleButton) view).isChecked();

if (on) {
Intent objCreek = new Intent(this, PlayCreek.class);
startService(objCreek);
SharedPreferences.Editor editorCreek=creekPref.edit();
editorCreek.putBoolean("is creek on", true);
editorCreek.commit();
Toast.makeText(getApplicationContext(), "Creek is Playing", Toast.LENGTH_SHORT).show();
} else {
Intent objCreek = new Intent(this, PlayCreek.class);
stopService(objCreek);
SharedPreferences.Editor editorCreek=rainPref.edit();
editorCreek.putBoolean("is creek on", false);
editorCreek.commit();
Toast.makeText(getApplicationContext(), "Creek is Stopped", Toast.LENGTH_SHORT).show();
}
}

PlayCrickets.java

public class PlayCrickets extends Service {
private static final String LOGCAT = null;
MediaPlayer objPlayer;

public void onCreate() {
super.onCreate();
Log.d(LOGCAT, "Service Started!");
objPlayer = MediaPlayer.create(this,R.raw.crickets);
}

public int onStartCommand(Intent intent, int flags, int startId) {
objPlayer.setLooping(true);
objPlayer.start();
Log.d(LOGCAT, "Media Player started!");
if(objPlayer.isLooping() != true){
Log.d(LOGCAT, "Problem in Playing Audio");
return 1;
}

public void onStop() {
objPlayer.stop();
objPlayer.release();
}

public void onPause() {
objPlayer.stop();
objPlayer.release();
}

public void onDestroy(){
objPlayer.stop();
objPlayer.release();
}

@Override
public IBinder onBind(Intent objIndent) {
return null;
}

@Override
public void onTaskRemoved(Intent rootIntent) {
System.out.println("onTaskRemoved called");
super.onTaskRemoved(rootIntent);
objPlayer.stop();
objPlayer.release();
//stop service
this.stopSelf();
}
}

最佳答案

在您的 list 中,在您定义服务的地方添加 stopWithTask 属性:

<service
android:enabled="true"
android:name=".YourService"
android:exported="false"
android:stopWithTask="true" />

如果上面的方法行得通,那就反过来

<service
android:enabled="true"
android:name=".MyService"
android:exported="false"
android:stopWithTask="false" /> //change to false

因此您的服务的 onTaskRemoved 方法将被调用。 (请记住,如果将 stopWithTask 设置为 true,则不会调用它)。

public class YourService extends Service {

@Override
public void onStartService() {
//your code
}

@Override
public void onTaskRemoved(Intent rootIntent) {
System.out.println("onTaskRemoved called");
super.onTaskRemoved(rootIntent);
//do something you want
//stop service
this.stopSelf();
}
}

关于android - 通过最近的应用程序删除应用程序时停止服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30690799/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com