我以RadioPlayerService为例在Android
中创建广播流我已添加以下代码以退出 RadioActivity.java
@Override
public void onBackPressed() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Exit ! Radio App.");
alertDialogBuilder
.setMessage("Click Yes to Exit!")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
此处我的应用已退出但通知正常this是我的通知类
任何人都可以建议我如何在退出时杀死整个应用
或者将通知服务和主要活动结合起来,以便我可以完全退出应用
This是完整的参考代码
任何人都可以建议我这样
更新1
我在主要活动中提供退出选项而不是在其他服务中
我的主要活动是RadioActivity.java
,我的服务是RadioPlayerService.java
所以我在这里给出主要活动的退出,所以我需要的是手段而不是退出主要活动它应该退出整个应用程序,包括服务。
不要在没有评论的情况下进行投票,不要在没有看到完整的酸性代码的情况下发表评论。
再次感谢
答案 0 :(得分:2)
您使用过System.exit(0);
,我建议您不要使用它。使用它并不是一种好的编程风格。有一种名为finish();
System.exit(0)
来终止Activity
,只需Activity.finish()
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
您可以将活动设置为单个实例,以便从您调用设备的任何位置返回堆栈中的相同活动。
在Manifest.xml中
“... android:launchMode =”singleInstance“>
要避免Intent
调用相同Activity
的多个实例,请从FLAG_ACTIVITY_NEW_TASK
删除Intent
标记并添加FLAG_ACTIVITY_CLEAR_TOP
一个。
来自Doc:
FLAG_ACTIVITY_CLEAR_TOP
如果设置,则启动的活动是 已经在当前任务中运行,而不是启动新任务 该活动的实例,其上的所有其他活动 将被关闭,这个意图将被传递到(现在在顶部) 旧活动作为新的意图。FLAG_ACTIVITY_NEW_TASK
如果设置,此活动将成为此历史堆栈上新任务的开始。
NotificationManager nMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nMgr.cancelAll();
@Override
public void onBackPressed() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Exit ! Radio App.");
alertDialogBuilder
.setMessage("Click Yes to Exit!")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mRadioManager .disconnect();// after adding this its also closed radio player
NotificationManager nMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nMgr.cancelAll();
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
答案 1 :(得分:0)
所以基本上你可以做的是,当你在对话框上单击是时,你应该通过调用finish()来终止你的活动,你也必须停止你的服务,或者如果它被你的Activity绑定,你可以避免调用stopService,它会在你的活动被销毁时通过调用Finish()自动取消绑定,检查下面的代码
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Exit ! Radio App.");
alertDialogBuilder
.setMessage("Click Yes to Exit!")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
moveTaskToBack(true);
//this will unbind the radioService
mRadioManager.disconnect();
finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
并在 RadioPlayerService 中,覆盖 onDestroy 方法并调用公共方法 stopFromNotification ()方法