2012-06-28 22 views
15

デバイス上の他のアプリケーションがインストールまたは削除されたときにブロードキャストを受信できるアプリケーションを作りたいと思います。他のアプリケーションがインストールまたは削除されたときにアプリケーションがブロードキャストを受信する方法

manifsetで私のコード

:AppListenerで

<receiver android:name=".apps.AppListener"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.PACKAGE_INSTALL"/> 
     <action android:name="android.intent.action.PACKAGE_ADDED"/> 
     <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
    </intent-filter> 
</receiver> 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class AppListener extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent arg1) { 
    // TODO Auto-generated method stub 
    Log.v(TAG, "there is a broadcast"); 
    } 
} 

が、私はすべての放送を受信することはできません。私はこの問題は、アプリケーションのアクセス許可、任意のアイデアのためだと思う?

ありがとうございました。マニフェストで

答えて

40

<receiver android:name=".apps.AppListener"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.PACKAGE_INSTALL"/> 
     <action android:name="android.intent.action.PACKAGE_ADDED"/> 
     <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
    </intent-filter> 
</receiver> 

はインテントフィルタタグの前に行を追加します

<data android:scheme="package"/> 

次のようになります。だからあなたのマニフェスト:

<receiver android:name=".apps.AppListener"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.PACKAGE_INSTALL"/> 
     <action android:name="android.intent.action.PACKAGE_ADDED"/> 
     <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
     <data android:scheme="package"/> 
    </intent-filter> 
</receiver> 

がわからないですそのPACKAGE_REMOVEDインテントが実際に使用可能な場合はそれになります。

+0

"android.intent.extra.REPLACING" .. rup35hのarg1.getDataString @のthnx –

+2

() "パッケージ:TheInstalledPackageName" ちょうど「パッケージのように:com.google.joke " – wangqi060934

+0

' PACKAGE_INSTALL'は役に立たず、廃止され、Googleではこれまで使用されていませんでした。https://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_INSTALL – Solidak

17

android.intent.action.PACKAGE_INSTALLは廃止予定であり、推奨されていません。システム用であるためです。他のすべては完璧であり、私は100の代わりに999を置くことを推奨します。文書には使用する最大または最小の数字が与えられません。数値が大きいほど、優先順位は受信者にその意図があります。翻訳者には申し訳ありません。私はスペイン語で話し、書く。 Information

<receiver android:name=".apps.AppListener"> 
<intent-filter android:priority="999"> 
    <action android:name="android.intent.action.PACKAGE_ADDED"/> 
    <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
    <data android:scheme="package"/> 
</intent-filter> 

+0

Thanx a lot @kiddie .... –

7

グレート回答、左のただ一つの小さな事:

を、すべてのアプリの更新には、第1 ACTION_PACKAGE_REMOVEDは、あなたがこれらのイベントを無視したい場合は、単にそれを追加ACTION_PACKAGE_ADDED-続い呼び出されますあなたのonReceive()上:

if(!(intent.getExtras() != null && 
    intent.getExtras().containsKey(Intent.EXTRA_REPLACING) && 
    intent.getExtras().getBoolean(Intent.EXTRA_REPLACING, false))) { 

    //DO YOUR THING 
} 

これはドキュメントからです。

が、これはパッケージの交換であるので、この放送が すぐに別のための追加の放送が続くことを示すためにACTION_PACKAGE_REMOVEDインテントに ブール余分なフィールドとして使用されるAPIレベル3文字列EXTRA_REPLACINGで

EXTRA_REPLACINGを追加しました同じパッケージ のバージョン。 定数値:戻りますそれは+1を働いた

+0

私のブロードキャストは、アプリケーションがインストールまたはアンインストールされたときにのみイベントをトリガーするようにしたいが、アプリケーションがアップデートされたときにはオンにしない。これをどう扱う? –

関連する問題