3

我想检测用户何时安装或删除应用程序,并且我没有找到执行此操作的BroadcastReceiver如何检测Android设备中的新应用程序

在我的应用程序中,我收到了关于类PackageManager的已安装应用程序的信息,但我不想定期扫描这些应用程序。有没有这样的BroadcastReceiver?或者任何ContentObserver?是否有可能获得已安装或删除应用程序的通知?

+0

我相信答案是_no_ ... – 2012-07-14 22:20:42

+0

看来我错了,:-),我忘了那一个! – 2012-07-14 22:27:19

+0

如果你感觉雄心勃勃,你应该看看'AsyncTaskLoader'类...在这里实现你自己的'Loader'在我看来是一个非常好的学习体验:P – 2012-07-14 22:30:07

回答

8

您可以使用Intent.ACTION_PACKAGE_ADDED注册BroadcastReceiver(如果需要,还可以注册Intent.ACTION_PACKAGE_REMOVED和/或Intent.ACTION_PACKAGE_CHANGED)。例如,

void registerReceiver() { 
    IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); 
    filter.addAction(Intent.ACTION_PACKAGE_REMOVED); 
    filter.addAction(Intent.ACTION_PACKAGE_CHANGED); 
    filter.addDataScheme("package_name");  
} 

public void onReceive(Context context, Intent intent) { 
    final String action = intent.getAction(); 

    if (action.equals(Intent.ACTION_PACKAGE_ADDED)) { 
     Uri data = intent.getData(); 
     String pkgName = data.getEncodedSchemeSpecificPart(); 
    } 

    /* etc. */ 
} 
+0

我认为'Intent.ACTION_PACKAGE_CHANGED'和'Intent.ACTION_PACKAGE_ADDED'和'Intent.ACTION_PACKAGE_REMOVED'完全相同,不是吗? – Alexrs95 2012-07-14 23:13:45

+0

不,你可以从这里检查:http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED – trante 2013-11-12 20:02:03

+0

谢谢我正在寻找'getEncodedSchemeSpecificPart'我原以为它是getHost我需要,但//在uri中缺少//破坏了... – schwiz 2014-03-07 17:52:17

相关问题