应用 android 的通知未关闭?
Notification is not closing with app android?
我以 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是我的通知class
任何人都可以建议我如何在退出时杀死整个应用程序
或者结合通知服务和主程序 activity 这样我就可以完全退出应用程序
This为完整参考码
谁能推荐我这种类型的
更新 1
我在主要 activity 中提供退出选项,而不是在其他服务中
我的主要activity是RadioActivity.java
,我的服务是RadioPlayerService.java
所以在这里我将 Exit 给 main activity 所以我需要的不是退出 main activity 它应该退出整个应用程序包括服务。
不要在没有评论的情况下投票不要在没有看到完整的源代码的情况下发表评论..
再次感谢
所以基本上您可以做的是,当您在对话框中单击是时,您应该通过调用 finish() 终止您的 activity,并且您还必须停止您的服务,或者如果它已绑定通过你的 Activity,你可以避免调用 stopService 并且当你的 activity 通过调用 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 方法并调用 public 方法 stopFromNotification() 方法也
你用过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);
您可以将您的 activity 设置为单一实例,这样您从任何地方调用设备时都会 return 与堆栈中的 activity 相同。
在Manifest.xml
" ... android:launchMode="singleInstance">
为了避免 Intent
调用同一个 Activity
的多个实例,从 Intent
中删除 FLAG_ACTIVITY_NEW_TASK
标志并添加 FLAG_ACTIVITY_CLEAR_TOP
标志。
来自医生:
FLAG_ACTIVITY_CLEAR_TOP
If set, and the activity being launched is
already running in the current task, then instead of launching a new
instance of that activity, all of the other activities on top of it
will be closed and this Intent will be delivered to the (now on top)
old activity as a new Intent.
FLAG_ACTIVITY_NEW_TASK
If set, this activity will become the start of a new task on this history stack.
清除所有通知
NotificationManager nMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nMgr.cancelAll();
更新1
@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();
}
我以 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是我的通知class
任何人都可以建议我如何在退出时杀死整个应用程序
或者结合通知服务和主程序 activity 这样我就可以完全退出应用程序
This为完整参考码
谁能推荐我这种类型的
更新 1
我在主要 activity 中提供退出选项,而不是在其他服务中
我的主要activity是RadioActivity.java
,我的服务是RadioPlayerService.java
所以在这里我将 Exit 给 main activity 所以我需要的不是退出 main activity 它应该退出整个应用程序包括服务。
不要在没有评论的情况下投票不要在没有看到完整的源代码的情况下发表评论..
再次感谢
所以基本上您可以做的是,当您在对话框中单击是时,您应该通过调用 finish() 终止您的 activity,并且您还必须停止您的服务,或者如果它已绑定通过你的 Activity,你可以避免调用 stopService 并且当你的 activity 通过调用 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 方法并调用 public 方法 stopFromNotification() 方法也
你用过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);
您可以将您的 activity 设置为单一实例,这样您从任何地方调用设备时都会 return 与堆栈中的 activity 相同。
在Manifest.xml
" ... android:launchMode="singleInstance">
为了避免 Intent
调用同一个 Activity
的多个实例,从 Intent
中删除 FLAG_ACTIVITY_NEW_TASK
标志并添加 FLAG_ACTIVITY_CLEAR_TOP
标志。
来自医生:
FLAG_ACTIVITY_CLEAR_TOP
If set, and the activity being launched is already running in the current task, then instead of launching a new instance of that activity, all of the other activities on top of it will be closed and this Intent will be delivered to the (now on top) old activity as a new Intent.FLAG_ACTIVITY_NEW_TASK
If set, this activity will become the start of a new task on this history stack.
清除所有通知
NotificationManager nMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nMgr.cancelAll();
更新1
@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();
}