[英]How to know “Don't keep activities” is enabled in ICS?
如何通过代码在ics中启用“不要保持活动”选项。 如果已启用,则如何阻止该活动。
注意:我在我的应用程序中使用了更多活动。因为我将一个活动移动到另一个活动,所以第一个活动被销毁。我可以将我的数据保存在onSaveInstanceState上。 没有使用保存的实例状态有任何方法可以做...
提前致谢..
导入以下包
import android.provider.Settings;
然后,您可以使用以下代码检查是否启用该选项:
Settings.System.getInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
你可以改变它:
Settings.System.putInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
希望能帮助到你
正是出于这个原因,那面旗帜就在那里。 我们的想法是检查并确保您的应用处理其活动被销毁。 你不能覆盖它,因为在现实世界中,如果设备内存不足,即使没有该标志也可能发生。 你需要编写代码来处理这种情况而不是覆盖它。
Settings.System.ALWAYS_FINISH_ACTIVITIES
现在已弃用,因此您应该使用
Settings.Global.ALWAYS_FINISH_ACTIVITIES.equals("1")
检查是否启用了此选项
更新(感谢Aviv Ben Shabat评论):
处理我创建了一个方法的所有sdk版本:
public static boolean isFinishActivitiesOptionEnabled(Context context) {
int result;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
result = Settings.System.getInt(context.getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
} else {
result = Settings.Global.getInt(context.getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0);
}
return result == 1;
}
我同意@Kaediil认为Android应用程序必须正常工作,同时检查“不要保持活动”选项。
因某些原因如果你必须检查“alwaysFinishActivities”值,你可以使用下面的代码;
/**
* returns true if AlwaysFinishActivities option is enabled/checked
*/
private boolean isAlwaysFinishActivitiesOptionEnabled() {
int alwaysFinishActivitiesInt = 0;
if (Build.VERSION.SDK_INT >= 17) {
alwaysFinishActivitiesInt = Settings.System.getInt(getApplicationContext().getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0);
} else {
alwaysFinishActivitiesInt = Settings.System.getInt(getApplicationContext().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
}
if (alwaysFinishActivitiesInt == 1) {
return true;
} else {
return false;
}
}
如果选中alwaysFinishActivities选项并且您希望取消选中它;
您可以将用户定向到“设置 - >开发人员选项”以取消选中该值。 (这比获得额外的可怕权限并以编程方式设置此值更好)
/**
* shows Settings -> Developer options screen
*/
private void showDeveloperOptionsScreen(){
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
}
提问者是对的,他有一个很好的问题,但仍未得到回答:-)
我用一个干净的简单例子测试了这个问题。 事实是,当选中“不保持活动”选项时,活动将被终止。 例如:Mainactivity调用子活动。 主要活动被杀死了。 按下子活动会导致重新启动Mainactivity。 这可能是一个问题,当主要活动正在做诸如加载内容等长期运行的东西时。
我对此的结论。 “不保留活动”选项是开发人员选项,不应在正常用户条件下设置。 因此开发人员应该能够检测到此设置。
int value = Settings.System.getInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES,0);
您还可以使用意图并每次终止活动。 只需在你的onBackPressed()中调用ReturnToMain,就应该打败“不要保持活动”的问题。 这是我在海外面对外国手机遇到的问题之一。
public void ReturnToMain() {
Intent view_user = new Intent(PanicAddUpdate.this, PanicAddMain.class);
view_user.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(view_user);
finish();
}
另一种选择是@ aegean的解决方案。 您必须将用户定向到“设置 - >开发人员选项”以取消选中该值。 这是我在对话框中使用的内容。确保添加finish()以便应用程序在按下后退按钮时不会崩溃,或者在按下主页按钮后尝试重新启动应用程序。
public void showDeveloperOptionsScreen(){
new AlertDialog.Builder(this)
.setTitle("Developer Options Detected!")
.setMessage("In order for Sender to work properly, please uncheck the \"Don't keep activities\" option.")
.setNegativeButton(android.R.string.no, null)
.setPositiveButton(android.R.string.yes, new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();
}
}).create().show();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.