java - 列出 c2dm/GCM 注册应用程序

标签 java android broadcastreceiver android-c2dm google-cloud-messaging

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

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

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

如果我们能够检测应用程序的 list 中是否包含这些行,我们应该能够列出它们。

最佳答案

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

关于java - 列出 c2dm/GCM 注册应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11519886/

相关文章:

android - 将其他应用程序的 Drawable 图标设置为通知生成器

android - 应用内购买可以添加一个指定额外的权限吗?

android - 如何在 Kotlin 的 Fragment 中使用 Android AlarmManager?

android - 再次调用startService时如何清除alarmManager set()

java - 如何在运行时在 java 中设置 ArrayList 的泛型类型?

java - Jenkins Windows Slave 无法编译,因为它使用 JRE 而不是 JDK

java - JSlider音频播放器问题

java - 渲染器/排序优化

android - 需要帮助才能使用评分栏

android - 将 ArrayList<Object> 从 BroadCastReceiver 发送到 Activity