我按照Google的GCM设置指南和他们在Github上的示例创建了一个接收通知的应用程序。
它什么时候工作:
- 应用程序已打开(所有设备) - 应用在后台(所有设备) - 应用程序关闭(除一个之外的所有设备)
不工作的手机:
- 华为P8 lite - Android 5.1 - Google Play服务8.3.01
这部手机很好用,即使用户杀死应用程序,它也可以接收WhatsApp消息或任何其他类型的消息。
我担心这可能会发生在许多其他我没有测试的设备上。因此,我想展示一些代码,以查看是否存在任何问题。
这是我的
它什么时候工作:
- 应用程序已打开(所有设备) - 应用在后台(所有设备) - 应用程序关闭(除一个之外的所有设备)
不工作的手机:
- 华为P8 lite - Android 5.1 - Google Play服务8.3.01
这部手机很好用,即使用户杀死应用程序,它也可以接收WhatsApp消息或任何其他类型的消息。
我担心这可能会发生在许多其他我没有测试的设备上。因此,我想展示一些代码,以查看是否存在任何问题。
这是我的
AndroidManifest.xml
:<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.presentation" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="com.example.presentation.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.presentation.permission.C2D_MESSAGE" />
<application
android:name=".AndroidApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.presentation" />
<!-- If you want to support pre-4.4 KitKat devices. -->
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
</intent-filter>
</receiver>
<service android:name="com.example.data.gcm.RegistrationIntentService"
android:exported="false" />
<service
android:name="com.example.data.gcm.MyGcmListenerService"
android:exported="false" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<service
android:name="com.example.data.gcm.MyInstanceIDListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID"/>
</intent-filter>
</service>
</application>
</manifest>
在项目级别的build.gradle
中添加了这个依赖项:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
classpath 'com.google.gms:google-services:1.4.0-beta3'
}
}
在应用级别的build.gradle
中添加了这个依赖项:
compile "com.google.android.gms:play-services-gcm:8.1.0"
Java类与Github示例相同。
为什么当用户关闭应用时,此设备无法工作,但在我测试的所有其他设备上都可以工作?
onDestroyed
)应用程序,而是让其在后台运行。如果您想要接收消息,可以尝试将优先级设置为高。 - bjiang