それは直接的には不可能であり、Android 開発者は、アプリがユーザーの設定を変更することを望んでいないと述べています。ただし、Android がこれらの設定を維持する方法に基づく回避策があります。
マニフェストを次のようにします。
<activity
android:name="MyLauncherActivity"
android:exported="true" />
<activity-alias
android:name="LauncherAlias1"
android:targetActivity="MyLauncherActivity" >
<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-alias>
<activity-alias
android:name="LauncherAlias2"
android:enabled="false"
android:targetActivity="MyLauncherActivity" >
<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-alias>
簡単にするために、当面のタスクに関係のない追加の属性を省略しました。
とにかく、マニフェストがこのようになったら、次のようなコードを使用してデフォルトのランチャーをクリアできます。
PackageManager pm = getPackageManager();
ComponentName cn1 = new ComponentName("com.mypackage", "com.mypackage.LauncherAlias1");
ComponentName cn2 = new ComponentName("com.mypackage", "com.mypackage.LauncherAlias2");
int dis = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
if(pm.getComponentEnabledSetting(cn1) == dis) dis = 3 - dis;
pm.setComponentEnabledSetting(cn1, dis, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(cn2, 3 - dis, PackageManager.DONT_KILL_APP);
1 つのエイリアスを有効にしてもう 1 つのエイリアスを無効にすることで、Android はユーザーのオプションが変更されたと認識します。これは、1 つのランチャーをインストールして別のランチャーをアンインストールしたかのようです。したがって、ユーザーは次にホームボタンを押したときに再度選択するように求められます。このアプローチは、誰のランチャーが現在のデフォルトであっても機能します。