截取Android设备上已安装的应用程序

我在数据库中获得了已安装应用程序的包名称和标签列表,现在我想拦截已安装的应用程序和数据库。 假设任何应用程序从设备中删除然后我想要更改数据库。 因为我使用广播接收器,但我的代码不起作用。

PackageManager pm = this.getPackageManager(); List  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(); } 

任何帮助?

你想要实现什么?

如果您试图阻止卸载或安装应用程序,那么我担心您不能这样做。 您所能做的就是要求收到通知。


编辑:

您是否还在清单中指定了intent-filter? 例如:

  ....  ....         
  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);