Android用代码打开系统设置->桌面设置的Activity遇上问题
我项目中有个需求,只需要能打开系统设置中切换桌面launcher的界面,让用户选择就行了。不需要直接切换。如果手动打开的话。
1).华为Android5.1.1路径:设置->应用管理->默认应用设置->桌面
2).华为Android6.0路径: 设置->应用管理->高级->默认应用设置->桌面
打开的界面如下图:
我用代码,想打开这个界面,我的代码如下:
public void startHuaweiSettingActOfDefLauncher() {
IntentFilter preferred_app_intent_filter = new IntentFilter();
preferred_app_intent_filter.addAction(Intent.ACTION_MAIN); //android.intent.action.MAIN
preferred_app_intent_filter.addCategory(Intent.CATEGORY_HOME); //android.intent.category.HOME
Intent preferred_app_intent = new Intent(Intent.ACTION_MAIN);
preferred_app_intent.addCategory(Intent.CATEGORY_HOME);
Intent intent = new Intent();
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName("com.android.settings", "com.android.settings.Settings$PreferredSettingsActivity");
intent.putExtra("preferred_app_label", "桌面");
intent.putExtra("preferred_app_type", "PREFERRED_HOME");
intent.putExtra("preferred_app_package_name", getPackageName());
//intent.putExtra("preferred_app_class_name", MainActivity.class.getName());
//intent.putExtra("is_user_confirmed", true);
intent.putExtra("preferred_app_intent", preferred_app_intent);
intent.putExtra("preferred_app_intent_filter", preferred_app_intent_filter);
startActivity(intent);
}
问题来了,上面代码,在Android5.1.1上能打开,在Android6.0上不能打开。
我试着从手机设置那里打开这个界面(即Android5.1.1为:设置->应用管理->默认应用设置->桌面;Android6.0为: 设置->应用管理->高级->默认应用设置->桌面),以及用代码在Android5.1.1下打开这个界面。
之后在命令行下分别输入:
//Android5.1.1系统设置中打开
adb shell dumpsys activity top >android5.txt
//Android6.0系统设置中打开
adb shell dumpsys activity top >android6.txt
//Android5.1.1代码中打开
adb shell dumpsys activity top >android5_ABTest.txt
获得的文件比较大,只截取一部分(完整的文件可以从链接中下载,我看不太懂)。其中红色框出来的,应该是调用参数(即调用方式),看起来系统设置中Android5.1.1,系统设置中Android6.0,和我的代码,调用参数是一样的啊。为什么代码只能在Android5.1.1上有效呢?
全部文件在:
http://
//Android5.1.1系统设置中打开
//Android6.0系统设置中打开
//我的代码在Android5.1.1中使用