12

アクティビティをデフォルトのランチャーとして設定して、ホームボタンのクリックを次のようにインターセプトします。

<activity
    android:name=".ExampleActivity"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.HOME" />        
        <category android:name="android.intent.category.DEFAULT" />               
    </intent-filter>
</activity>

アクティビティExampleActivityが起動したときにhomeキーをクリックすると、選択するように求められます。これをデフォルトにすることを選択し、アクティビティを選択した場合、必要に応じてアクティビティにとどまります。

問題は、アクティビティを終了するときに、デフォルトのランチャーからアクティビティを削除しようとしましたが、失敗することです。

私が試してみました:

ComponentName componentName = new ComponentName( 
                    "com.example.exampleactivity", 
                    "com.example.exampleactivity.class");

pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);

と:

PackageManager pm = getActivity().getPackageManager();
             ComponentName name = new ComponentName(this, "com.example.exampleactivity.class");
             pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);

しかし、私の指定homeは決して削除されません。

誰かが上記を修正するための実用的な方法を持っていますか?

アプリケーション全体ではなく、特定のアクティビティのデフォルトとしてホームボタンを使用したくないだけです。アクティビティを終了するときは、削除してデフォルトに戻す必要があります。

4

4 に答える 4

17

デフォルトをクリアしているのがアプリの場合は、次のように呼び出すことができます。

getPackageManager().clearPackagePreferredActivities(getPackageName());

次に、使用するランチャーを選択するダイアログを表示するには、次を使用します。

final Intent intent=new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
于 2012-12-22T23:16:11.433 に答える
2

この解決策は、それを行う賢い方法 です。デフォルトのホームアプリケーションをクリアして設定する

onResume() のコードは基本的に次のようになります。

    ComponentName componentName = new ComponentName(MyActivity.this, FakeHome.class);
    if (!isMyLauncherDefault()) {
        Log.e(TAG, "MyActivity is not default home activity!");

        // toggle fake activity
        PackageManager pm = getPackageManager();
        int flag = ((pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED
                : PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
        pm.setComponentEnabledSetting(componentName, flag, PackageManager.DONT_KILL_APP);

        // start home activity to enable chooser
        Intent selector = new Intent(Intent.ACTION_MAIN);
        selector.addCategory(Intent.CATEGORY_HOME);
        startActivity(selector);
    }

メソッド isMyLauncherDefault() はここから取得されます: アプリケーションがデフォルトのランチャーかどうかを確認する方法

于 2013-02-16T12:50:44.723 に答える
1

アプリケーションに合わせてホームキーの動作をオーバーライドすることはできません。これは、ユーザーが常に静的な場所に戻ることができるようにするための、Googleによる設計上の決定です。これを回避する方法はいくつかあるかもしれませんが(まだ存在している場合)、それらはアプリケーションが依存してはならない意図しないバグです。

簡単な答え:ホームキー以外の任意のキーを持つことができます。

于 2012-09-26T03:40:14.560 に答える
1

android.permission.SET_PREFERRED_APPLICATIONS許可を見てください。また、このメソッドhttp://developer.android.com/reference/android/content/pm/PackageManager.html#clearPackagePreferredActivities(java.lang.String)

于 2012-09-26T03:56:00.180 に答える