2009-10-20 8 views
5

PACKAGEインテントのための放送を受信することはできません。次にマニフェストファイルのコードと受信者を示します。ログの状態は決して起こりませんが、私は "HomeLoaders"(Launcher)のデバッグ文と同じブロードキャストを見ることができます。私は何が欠けていますか?は、私はパッケージイベントのブロードキャストイベントを受信するブロードキャストレシーバーを登録しようとしています

public class IntentListener extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Log.i("INTENT LISTNER:", intent.getAction()); 
    } 
} 

<receiver android:name="IntentListener" android:enabled="true" android:exported="true"> 
    <intent-filter> 
     <data android:scheme="package"></data> 
     <action android:name="android.intent.action.PACKAGE_ADDED"></action> 
     <action android:name="android.intent.action.PACKAGE_ADDED"></action> 
     <action android:name="android.intent.action.PACKAGE_CHANGED"></action> 
    </intent-filter> 
</receiver> 
+1

エラーがIntentListenerの代わりcom.android.samples.app.IntentListenerにすることができますか? – Zorb

答えて

4

これらIntentのマニフェストに登録コンポーネントによって、だけregisterReceiver()介してJavaで登録受信機によって受信することができない可能性があります。

+0

イェ・イム・イット・メイ・イット・イット・ケースは、好奇心の理由から、なぜこのケースですか?私はこれにセキュリティの意味はないと思いますか? –

+3

私は1日ほど前に別のSOの質問にコメントしたので、Androidは必ずしも常に新しいコンポーネントを起動するとは限りません。私が知っていた1つのケースは、バッテリイベント(ACTION_BATTERY_LOWなど)のケースでした。 SCREEN_OFF(と多分SCREEN_ON)は他のものです。それを考えると、registerReceiver()で作業するようになると、この問題が解決します。私は、ブログの投稿や書籍のセクションでこのトピックをカバーする必要があると思います。残念ながら、マニフェスト・レシーバのないインテントのリストは文書化されていません。 – CommonsWare

+1

これが文書化されているところを見たいと思います。私はソースを検査したが、これらの保護されたブロードキャストに対する唯一のチェックは、システムプロセスではないブロードキャストを開始できないためです。私はまた、マニフェストを通じてこの目的のためにソースレジスタに他のパッケージを見ました。 – James

0

これは

<category android:name="android.intent.category.DEFAULT" /> 

マイアプリのみAndroid Marketアプリのインストールを検出せずに、私のマニフェストですが、削除されません。今では、Androidマーケット以外のアプリのブロードキャストも受信します。

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:label="@string/app_name" 
     android:name=".SomeActivity" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name="com.som.pakage.PackageInstallReceiver" > 
     <intent-filter > 
      <action android:name="android.intent.action.PACKAGE_ADDED" /> 
      <action android:name="android.intent.action.PACKAGE_REMOVED" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="package" /> 
     </intent-filter> 
    </receiver> 
</application> 
0

これら三つのインテントすなわち、

Intent.ACTION_PACKAGE_ADDED 
Intent.ACTION_PACKAGE_REMOVED 
Intent.ACTION_PACKAGE_CHANGED 

システムによってブロードキャストのみ登録受信機は放送なし放送受信コンポーネントを受信するように添加

Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT 

フラグを有しています開始されます。詳細はIntentおよびSourceのPackageManagerServiceクラスを参照してください。

関連する問題