如何在Android设备上检测新应用程序

3

我希望能够检测用户何时安装或删除应用程序,但我没有找到可以完成此任务的BroadcastReceiver

在我的应用程序中,我使用PackageManager类获取已安装应用程序的信息,但我不想定期扫描这些应用程序。是否有任何可以完成此任务的BroadcastReceiverContentObserver?是否可以获得有关已安装或删除应用程序的通知?


我相信答案是“不”。 - Kristopher Micinski
看来我错了,:-),我忘记了那个! - Kristopher Micinski
如果你有雄心壮志,你应该看一下AsyncTaskLoader类...在这里实现自己的Loader会是一个非常好的学习经验,我个人认为 :P - Alex Lockwood
1
文档中的示例代码实际上完全符合您所描述的(或者至少从外观上看是这样)。去看看吧! - Alex Lockwood
谢谢你的一切。我不知道该怎么做,但我想在应用程序列表更改时将数据上传到服务器,而无需在那个时刻运行应用程序,所以我认为我会使用服务来完成它,这是最好的方法吗? :) - Alexrs95
1个回答

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. */
}

我认为Intent.ACTION_PACKAGE_CHANGED与Intent.ACTION_PACKAGE_ADDED和Intent.ACTION_PACKAGE_REMOVED是相同的,不是吗? - Alexrs95
不可以。您可以从这里查看:http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED - trante
谢谢,我一直在找“getEncodedSchemeSpecificPart”,本来我以为它应该是“getHost”,但uri中缺少斜杠... - Nathan Schwermann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接