2

有没有办法列出所有安装在 Android 手机上的应用程序,以了解它们是否注册到 GCM / C2DM 帐户并接收数据?

我实际上在手机上收到了一些广告,我想知道哪个应用程序在向我发送垃圾邮件。我自己做了一些 C2DM 应用程序,我知道我在清单中添加了这些行:

<receiver android:name=".NotificationsReceiver" android:permission="com.google.android.c2dm.permission.SEND">
                 <intent-filter>
                      <action android:name="com.google.android.c2dm.intent.RECEIVE"></action>
                      <action android:name="com.google.android.c2dm.intent.REGISTRATION"></action>
    ...

如果我们可以检测应用程序的清单中是否有这些行,我们应该能够列出它们。

4

1 回答 1

4
    PackageManager pm = context.getPackageManager();
    List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS);
    for (PackageInfo pi : packages)
    {
        for (String usesPermission : pi.requestedPermissions){
            if (usesPermission.equalsIgnoreCase("com.google.android.c2dm.permission.RECEIVE")){
                Log.d(TAG, "app with permission to receive push: "+pi.applicationInfo.name);
            }
        }
    }
于 2012-07-17T10:27:54.137 回答