2

我正在开发一个我想在其中实现 GCM 功能的 android 应用程序。我可以实现并且它在 Android Kitkat 4.4 版本中运行良好(在 Micromax 089 上测试)。但不适用于在 Android Lolipop(Android 5.0) 及更高版本上运行的设备(如Lava Iris Fuel F1Moto x play )。

我用于验证设备依赖项和清单权限的代码片段

GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
registerReceiver(mHandleMessageReceiver, new IntentFilter(
                DISPLAY_MESSAGE_ACTION));

应用程序崩溃了GCMRegistrar.checkDevice(this);

Logcat 的屏幕截图

Logcat 截图

通过一些研究,我发现了我在下面列出的一些原因,这些原因可能会导致应用程序崩溃

  1. 该应用程序可能未针对 Google API。
  2. 可能未安装 Google Play 服务。
  3. 互联网可能不可用。
  4. 与自己的服务器的连接可能已关闭。

即使我已经验证了上述所有情况,也无法解决问题。

请帮我找到解决方案。

4

1 回答 1

6

您是否在清单中添加了此代码?

<receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>

            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="<YOUR PACKAGE NAME>" />
        </intent-filter>
    </receiver>

顺便说一句,GCMRegistrar 已经过时了,我不推荐它。使用这个 GCM Android

您可以尝试使用Google Cloud Messaging库而不是包含 GCMRegistrar 的已弃用库。这是因为某些设备在其 Android 皮肤中没有此包com.google.android.gsf,尤其是联想和摩托罗拉,这就是为什么您必须在 checkDevice() 上获得 Unsupported Exception

于 2016-04-12T13:54:56.603 回答