在我的应用程序中,有一个条件会检查每一天,如果它变为真,那么我希望我的应用程序在运行之间接近,就像崩溃一样,堆栈也会变得清晰。
我已尝试并测试了许多解决方案,但没有找到按我想要的方式工作的解决方案。 我的 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。
答案 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
注意:为您的应用创建广播接收器(添加清单),而不是针对特定活动