我安装了一个启动程序应用程序。用户已经选择了另一个默认的启动程序,这意味着当按Home键时,默认的启动程序将出现在前面。
我想给用户提供一个重置默认启动程序的便利。例如在我的启动程序的用户界面中点击一个按钮将使启动程序弹出窗口显示。
go启动程序可以做到这一点(在go的设置视图中)。似乎go launcher做了类似于“packagemanager.clearpackagepreferredactivities(“com.android.launcher”)的事情来清除首选的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>

使用“packagemanager.setcomponentenabledset”触发os clear current preferred launcher:
    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);
   }

我就是这样做的!享受!

10-07 23:06