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.