2012-01-18 11 views
10

デバイスにインストールされた内部で開発されたアプリケーションのログを保持しているアプリケーションがあります。インストール時にIntent.PACKAGE_ADDEDのための放送受信機が起動し、次のコードを使用して、パッケージ名が記録されていますIntent.ACTION_PACKAGE_REMOVEDを使用してアンインストールされたパッケージ名の検索方法

public class NewInstallReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle b = intent.getExtras(); 
     int uid = b.getInt(Intent.EXTRA_UID); 
     String[] packages = context.getPackageManager().getPackagesForUid(uid); 

     ApplicationService appService = new ApplicationService(context); 
     appService.ApplicationInstalled(packages); 
    } 
} 

Intent.PACKAGE_REMOVED、パッケージへのすべての参照のための放送受信機を使用しているとき、私が直面してる問題がありますユニークなId(UID)を介してヌル情報が返されます(既にアンインストールされているため、期待通りです)。その間は一時的な解決策がありますが、それほどエレガントではなく、次のバージョンではよりクリーンなコードを作りたいと思います。コードが動作するはずです方法の例:

public class RemoveApplicationReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle b = intent.getExtras(); 
     int uid = b.getInt(Intent.EXTRA_UID); 
     String[] packages = context.getPackageManager().getPackagesForUid(uid); 

     ApplicationService appService = new ApplicationService(context); 
     appService.ApplicationRemoved(packages); 
    } 

} 

ので復習に、質問は次のとおりです。

プログラムが削除された後にどのように、私はテントのための放送受信機にパッケージ名を参照することができます。 PACKAGE_REMOVED。

おかげ

+0

getPackagesForUid(uid)からもnullが返されています。私が望むのは、現在のユーザー用にインストールされたすべてのパッケージのリストを取得することです。誰かが何らかの入力を提供できますか? – Pratik

答えて

13

は、パッケージ名は、あなたがBroadcasReceiverからもらったテント内にある、「のgetData()」関数を使用して、インストール/アンインストールパッケージのComponentMameがあります。

+12

Worked great ...単純にgetData()。getSchemeSpecificPart()を使用しました。ありがとう – Kennifer

+4

intent.toString()を印刷すると、パッケージ名が表示されますが、intent.getData()。getSchemeSpecificPart()を使用すると空の文字列が表示されます。私は間違って何をしていますか? – gonzobrains

+3

@gonzobrainsあなたはおそらく計画を設定していませんか?マニフェストでは、次のようになります。 '' –

関連する問題