0

ユーザーが [ホーム] をクリックすると、ランチャーの選択が与えられ、それをデフォルトとして設定するかどうかも選択できます。問題は、後で再度変更するのが難しいことです。

これを修正するために、これをトリガーする「優先ランチャーのリセット」を追加しました。

getPackageManager().clearPackagePreferredActivities(getPackageName());

ただし、この行は、彼が私のランチャーを選択した場合にのみ、優先ランチャーをリセットします。優先ランチャーが何であれクリアするスニペットが必要なので、次にユーザーがホームをクリックすると、オプションが再び表示されます。

4

2 に答える 2

10

それは直接的には不可能であり、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 つのランチャーをインストールして別のランチャーをアンインストールしたかのようです。したがって、ユーザーは次にホームボタンを押したときに再度選択するように求められます。このアプローチは、誰のランチャーが現在のデフォルトであっても機能します。

于 2013-03-21T00:58:37.950 に答える