关闭从BroadcastReceiver运行应用程序

时间:2015-09-28 06:28:22

标签: android android-intent android-activity broadcastreceiver

在我的应用程序中,有一个条件会检查每一天,如果它变为真,那么我希望我的应用程序在运行之间接近,就像崩溃一样,堆栈也会变得清晰。

我已尝试并测试了许多解决方案,但没有找到按我想要的方式工作的解决方案。 我的 BroadcastReceiver

 public void onReceive(Context context, Intent intent) {
        PreferenceForApp prefs = new PreferenceForApp(context);
        Bundle bundle = intent.getExtras();
        if (bundle!=null){
            if(bundle.containsKey("exception")) {

//                String e = bundle.getString("exception")
                if(bundle.get("exception").toString().equalsIgnoreCase("http request failed with error_msg No Match Found")) {
                    prefs.setIsDeviceValidated(false);
                    prefs.setIsLogIn(false);
                    Log.i("Time", "Exception Occur");

                    Intent CSPIntent=new Intent(context,CSPLoginActivity.class);
                    CSPIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    CSPIntent.putExtra("close_activity", true);
                    Log.i("Time", "IntentExit");
                    context.startActivity(CSPIntent);
                }
            }
        }
    }
}

代码在我从broadcastReceiver调用的Activity中完成:

if (getIntent().getBooleanExtra("close_activity",false)) {
    Log.i("Time", "ExitCSPLogin");
    this.finish();
}

此代码未在运行之间关闭App。

2 个答案:

答案 0 :(得分:1)

您需要在活动中注册BroadcastReceiver,并在关闭申请时向BroadcastReceiver发送广播。

在你的活动中试试这个:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.package.ACTION_CLOSE");;
BroadcastReceiver Receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    };
registerReceiver(Receiver, intentFilter);

在您的onDestroy()方法活动取消注册BroadcastReceiver

@Override
protected void onDestroy() {
    unregisterReceiver(Receiver);
    super.onDestroy();
}

现在,当您想要关闭应用程序时,请向BroadcastReceiver发送广播:

Intent broadcastIntent = new Intent();
broadcastIntent.setAction("com.package.ACTION_CLOSE");
sendBroadcast(broadcastIntent);

希望这有帮助!

答案 1 :(得分:0)

每次用户进入您的应用时,您都必须在应用的mainActivity onCreate方法中检查以下条件。如果您想立即关闭应用,请在onResume

if (!prefs.getIsDeviceValidated()) {
    Log.i("Time", "ExitCSPLogin");
    this.finish();
}

我假设您的应用中有多个活动,因此在我们将其放入主要活动的每项活动中都会检查上方标记。允许用户使用您的应用,直到他/她来到mainActivity

注意:为您的应用创建广播接收器(添加清单),而不是针对特定活动