4

マニフェストで次のように記述できるインテントフィルターのカスタムBroadcastReceiverを(実行時に)登録する必要があります

<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>


ユーザーがアプリケーションのボタンを押す(またはパスワードを入力する)ことでアプリケーションを終了するときに、レシーバーの登録を解除します。

コードを使用して登録されたレシーバー

receiver_ = new MyReceiver();
filter_ = new IntentFilter(Intent.ACTION_MAIN);
filter_.addCategory(Intent.CATEGORY_HOME);
filter_.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(receiver_, filter_);

インテントを受信しないため、onReceive()関数は呼び出されません。

私が間違っていることと、この問題を解決する可能性はありますか?ありがとう。

4

1 に答える 1

4

BroadcastReceiverブロードキャストによってのみトリガーされますIntent(つまり、Intentを使用して送信されsendBroadcast()ます)。あなたが説明しているインテント (ACTION=MAIN, CATEGORY=HOME) はブロードキャストではありませんIntent。これはIntent、アクティビティを開始するために使用される です (つまり、誰かがそのように見える で呼び出しますstartActivity()) Intent

ホーム画面の代替品を作成しようとしているようです。それがあなたがしたいことなら、あなたのマニフェストActivityにそれを持っている必要があります。<intent-filter>これを動的に登録/登録解除することはできません。

ホーム画面の交換を有効/無効にする必要がある場合は、PackageManager. ここを見てsetComponentEnabledSetting()ください:http://developer.android.com/reference/android/content/pm/PackageManager.html

あなたが見つけたことを私たちに知らせてください!

于 2012-10-10T21:42:35.423 に答える