简体   繁体   中英

GCM not receiving messages on android 4.0.4 device

I'm trying to get GCM working on a device with android 4.0.4. First of all, sending from the device to the server to another device is no problem, it's the receiving part that won't work. Second, I'm also working with a device with android 5 and on that phone it all works fine. I think it might have something to do with the device, but I'm not sure (MEDION p4013). It's android 4.0.4 so you don't need a google account to make it work, but to be sure I also activated an account on the phone but still no result.

here is my manifest:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<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.example.tom.stapp3.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>
<uses-permission android:name="com.example.tom.stapp3.permission.C2D_MESSAGE"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name=".application.StApp">

    <receiver android:name=".gcm.GCMBroadCastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">

        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
            <category android:name="com.example.tom.stapp3"/>
        </intent-filter>
    </receiver>

    <service android:name=".gcm.GCMMessageHandler"/>
    <meta-data android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>

    <service
        android:name=".service.ShimmerService"
        android:enabled="true">
    </service>

    <activity
        android:name=".activity.FragmentViewer"
        android:label="Stapp 3" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activity.ProfileView"
        android:label="@string/title_activity_profile_view">
    </activity>
    <activity
        android:name=".activity.LeaderboardView"
        android:label="@string/title_activity_leaderboard_view"
        android:launchMode="singleTop">
    </activity>
    <activity android:name=".activity.StrangerView"
        android:label="@string/title_activity_stranger_view">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.tom.stapp3.activity.LeaderboardView" />
    </activity>
    <activity
        android:name=".activity.ConnectionView"
        android:label="@string/title_activity_connection_view" >
    </activity>

    <activity
        android:name=".activity.QuestList"
        android:label="@string/title_activity_quest_view" >
    </activity>
    <activity
        android:name=".activity.SoloQuestDescription"
        android:label="@string/title_activity_quest_description" >
    </activity>
    <activity
        android:name=".activity.GraphView"
        android:configChanges="orientation|screenSize"
        android:label="@string/title_activity_graph">
    </activity>
    <activity
        android:name=".activity.GCMTestActivity"
        android:label="@string/title_activity_internet__connection" >
    </activity>
</application>

the broadcast receiver:

        @Override
        public void onReceive(Context context, Intent intent) {
            ComponentName comp = new ComponentName(context.getPackageName(), GCMMessageHandler.class.getName());
            Log.d("received", "message");
            startWakefulService(context, intent.setComponent(comp));
            setResultCode(Activity.RESULT_OK);
        }

and the handler:

private Handler handler;

public GCMMessageHandler() {
    super("GCMMessageHandler");
}

@Override
public void onCreate() {
    super.onCreate();
    handler = new Handler();
}

@Override
protected void onHandleIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
    String messageType = gcm.getMessageType(intent);
    final int challengeId = Integer.parseInt(extras.getString("challenge_id"));
    final String message = extras.getString("message");
    handler.post(new Runnable() {
        @Override
        public void run() {
            if(challengeId == -1) {
                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
            } else {
                //TODO implementatie
            }
        }
    });
    GCMBroadCastReceiver.completeWakefulIntent(intent);
}

ok I found it,

the problem was in the build.gradle of the app. The applicationId did not match the package name of the application. Apparently with older versions of android you get a problem, but with newer versions it changes it somewhere automatically.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM