通知没有关闭app android?

时间:2016-12-27 05:15:41

标签: android notifications exit

我以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

所以我在这里给出主要活动的退出,所以我需要的是手段而不是退出主要活动它应该退出整个应用程序,包括服务。

不要在没有评论的情况下进行投票,不要在没有看到完整的酸性代码的情况下发表评论。

再次感谢

2 个答案:

答案 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();

UPDATE1

@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 ()方法