2011-03-01 26 views
3

パッケージ名&のリストが見つかりましたデータベースにインストールされているアプリケーションのラベル。今はインストールされているアプリケーションとデータベースを傍受します。任意のアプリケーションをデバイスから削除し、次にデータベースに変更を加えたいとします。私は放送受信機を使用していますが、私のコードは動作しません。アンドロイドデバイスにインストールされたアプリケーションの傍受

PackageManager pm = this.getPackageManager(); 
List <ApplicationInfo> list = getPackageManager().getInstalledApplications(PackageManager.PERMISSION_GRANTED); 
for (int n = 0; n < list.size(); n++) { 
    Apps.add(list.get(n).loadLabel(pm).toString()); 
    AppsP.add(list.get(n).packageName.toString()); 
    Log.w("Installed Applications", list.get(n).loadLabel(pm).toString()); 
    Log.w("Installed Applications Package", list.get(n).packageName.toString()); 


    ... 
    In other class 

    public class PackageReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
      if (intent.getAction().equalsIgnoreCase(Intent.ACTION_PACKAGE_ADDED)) { 
       String added_package = intent.getData().toString(); 
       Log.i("PackageReceiver", "Package Added = " + added_package); 

      } else if (intent.getAction().equalsIgnoreCase(Intent.ACTION_PACKAGE_REMOVED)) { 
       String removed_package = intent.getData().toString(); 
       MyDBHelper DB = new MyDBHelper(context); 
       Log.i("PackageReceiver", "Package removed = " + removed_package); 
       DB.open(); 
       DB.deleteStmt = DB.db.compileStatement(QueryManager.ApplicationDelete); 
       DB.deleteStmt.bindString(1, removed_package); 
       DB.close(); 

      } 

任意のヘルプ??

答えて

1
intentAPP.addAction(Intent.ACTION_PACKAGE_ADDED); 
      intentAPP.addAction(Intent.ACTION_PACKAGE_CHANGED); 
      intentAPP.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED); 
      intentAPP.addAction(Intent.ACTION_PACKAGE_INSTALL); 
      intentAPP.addAction(Intent.ACTION_PACKAGE_REMOVED); 
      intentAPP.addAction(Intent.ACTION_PACKAGE_REPLACED); 
      intentAPP.addAction(Intent.ACTION_PACKAGE_RESTARTED); 

//for storing list in db 

    for (int i = 0; i < AppsP.size() && i < Apps.size(); i++) { 

        DB.insertStmt.bindString(1, URLDecoder.decode(AppsP.get(i))); 
        DB.insertStmt.bindString(2, URLDecoder.decode(Apps.get(i))); 
        DB.insertStmt.bindString(3, 1 + ""); 
        DB.insertStmt.bindString(4, "false"); 
        DB.insertStmt.executeInsert(); 

       } 

//adding package notification 
if (intent.getAction().equalsIgnoreCase(Intent.ACTION_PACKAGE_ADDED)) { 
      String added_package = intent.getData().toString(); 
      Log.i("PackageReceiver", "Package Added = " + added_package); 
      Intent Intent_add = new Intent(); 
      Intent_add.setClass(context, ServiceAppsAdd.class); 
      Intent_add.putExtra("Package_Name", added_package.substring(8)); 
      Intent_add.putExtra("Status", status_new); 
      context.startService(Intent_add); 
3

正確に達成しようとしていますか?

あなたがアプリケーションのアンインストールやインストールを防止しようとしている場合、私はあなたがそれを行うことができないことに恐れています。あなたができることは、通知を受けることだけです。


EDIT:

はまた、あなたのマニフェストでインテントフィルタを指定したことがありますか?たとえば:

<manifest> 
    .... 
    <application> 
     .... 
     <receiver> 
      <intent-filter> 
       <action android:name="android.intent.action.PACKAGE_ADDED"> 
       <action android:name="android.intent.action.PACKAGE_REMOVED"> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 
+0

いいえ、私はちょうど私のDB内のすべてのインストールされたアプリケーションのリストが欲しい、そしてその後、私のデシベルとアプリケーションの間で、それはリアルタイム傍受(削除/インストール)します。 –

+0

最後に私は答えを得た...すべてに感謝します。 –

+0

@nimit:これをどうやって解決しましたか?実際に私はこのことにもこだわっています – Sam

関連する問題