我正在使用Android Studio。我在应用程序中实现了推送服务。它适用于具有较新Android版本的所有类型的设备,但是它不适用于带有Android 2.3.6的Galaxy S2 Mini。该设备接收来自具有 Urban Airship 库的其他应用程序的推送。
清单的相关部分:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="com.my_app.app.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.my_app.app.permission.C2D_MESSAGE" />
<receiver
android:name=".IntentReceiver"
android:permission="com.google.android.c2dm.permission.SEND"
>
<intent-filter
android:priority="100">
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<action android:name="com.google.android.c2dm.intent.C2D_MESSAGE" />
<category android:name="com.my_app.app" />
</intent-filter>
</receiver>
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<service android:name=".GCMIntentService"
android:enabled="true"/>
IntentReceiver.java:
import android.support.v4.content.WakefulBroadcastReceiver;
public class IntentReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//doing some stuff & starting my service here,
//never gets called with said device
}
}
设备通过推送注册。在返回 id 之前,我必须调用它两次,但正确的 Id 保存在我的后端(无论如何我手动发送推送,所以这应该不是问题(。当应用程序位于前台时,我还从代码注册了第二个接收器,但没有一个被调用。
如果我在清单中添加<uses-permission android:name="android.permission.C2D_MESSAGE" />
,则在发送推送时会收到com.google.android.c2dm.intent.REGISTRATION
操作。
我在Galaxy Tab上遇到了同样的问题。在更新之前,每次推送都会收到一个"com.google.android.c2dm.intent.REGISTRATION"
(设置了 intent.getStringExtra("unregister"((。因此,它没有获得RECEIVE,而是未注册,就像Galaxy Mini一样。然后我将其更新为 4.2.2。现在,它每次推送都会像它应该的那样接收。我很少读到这个问题(没有收到 <4.1 的推送(。但我没有找到解决方案。我想知道是否有人经历过类似的事情并找到了解决方案,或者是否有人看到我的清单有问题。
因此,显然并非清单中的所有软件包名称都替换为build.gradle。就我而言(使用Android Studio 0.8(,是自定义权限出错了。我正在使用口味,我想我应该提到这一点。自定义权限中的包名称必须是包含风味的包名称,如下所示:
<permission
android:name="com.my_app.app.myflavour.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.my_app.app.myflavour.permission.C2D_MESSAGE" />