如何检测Android设备中的新应用程序
我想检测用户何时安装或删除应用程序,并且我没有找到执行此操作的BroadcastReceiver
。如何检测Android设备中的新应用程序
在我的应用程序中,我收到了关于类PackageManager
的已安装应用程序的信息,但我不想定期扫描这些应用程序。有没有这样的BroadcastReceiver
?或者任何ContentObserver
?是否有可能获得已安装或删除应用程序的通知?
您可以使用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. */
}
我认为'Intent.ACTION_PACKAGE_CHANGED'和'Intent.ACTION_PACKAGE_ADDED'和'Intent.ACTION_PACKAGE_REMOVED'完全相同,不是吗? – Alexrs95 2012-07-14 23:13:45
不,你可以从这里检查:http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED – trante 2013-11-12 20:02:03
谢谢我正在寻找'getEncodedSchemeSpecificPart'我原以为它是getHost我需要,但//在uri中缺少//破坏了... – schwiz 2014-03-07 17:52:17
我相信答案是_no_ ... – 2012-07-14 22:20:42
看来我错了,:-),我忘了那一个! – 2012-07-14 22:27:19
如果你感觉雄心勃勃,你应该看看'AsyncTaskLoader'类...在这里实现你自己的'Loader'在我看来是一个非常好的学习体验:P – 2012-07-14 22:30:07