应用 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();

}