RoF*_*oFF 2 android android-launcher
我安装了一个Launcher应用程序.并且用户已选择另一个启动器作为默认设置,这意味着当按下HOME时,默认启动器将出现在前面.
我想为用户提供重置默认启动器的便利.例如在我的启动器的UI中单击按钮将显示Launcher-Pick-Up弹出窗口.
Go Launcher可以做到这一点(在Go的设置视图中).似乎Go Launcher做了类似"PackageManager.clearPackagePreferredActivities("com.android.launcher")"的事情来清除首选的启动器活动!
如何实现?
启动器只能清除自己喜欢的安全问题设置.
这是一个解决方法:
在Manifest.xml中注册一个模型活动:
<activity
android:name="MockupLauncher"
android:enabled="false"
android:exported="false"
android:excludeFromRecents="true"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
使用"PackageManager.setComponentEnabledSetting"来触发OS清除当前首选启动器:
private void resetPreferedLauncher() {
PackageManager pm = mContext.getPackageManager();
ComponentName mockupComponent = new ComponentName(MockupLauncher.class.getPackage().getName(), MockupLauncher.class.getName());
pm.setComponentEnabledSetting(mockupComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(startMain);
pm.setComponentEnabledSetting(mockupComponent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
// or
//pm.setComponentEnabledSetting(mockupComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
Run Code Online (Sandbox Code Playgroud)
这就是我的成就!请享用!
| 归档时间: |
|
| 查看次数: |
2876 次 |
| 最近记录: |