未使用Android版本调用IntentReceiver< 4.1

时间:2014-12-08 08:36:16

标签: android android-intent push google-cloud-messaging android-c2dm

我正在使用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(“未注册”))。因此,与Galaxy Mini一样,它没有获得RECEIVE,而是取消注册。然后我将其更新为4.2.2。它现在每次按下都会得到RECEIVE。 我很少读到这个问题(没有接收&lt; 4.1的推送)。但我找不到解决方案。 我想知道是否有人经历过类似的事情并找到了解决方案,或者有人看到我的清单有问题。

1 个答案:

答案 0 :(得分:0)

因此,显然并非清单中的所有包名都被build.gradle取代。在我的情况下(使用Android Studio 0.8),自定义权限是错误的。我正在使用口味,我想我应该提到这一点。自定义权限中的包名称必须是包含flavor的包名称,如下所示:

 <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" />