大佬教程收集整理的这篇文章主要介绍了GCM在android 2.3.6中不接收消息,但在android 4.1.2中有效,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://scheR_973_11845@as.android.com/apk/res/android" package="com.ciqtech.quicky.mobile.passenger" android:versionCode="1" android:versionName="1.0" android:installLOCATIOn="preferExternal"> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <permission android:name="com.ciqtech.quicky.mobile.passenger.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="com.ciqtech.quicky.mobile.passenger.permission.MAPS_RECEIVE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GserviCES" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- GCM CONfigURATION --> <permission android:name="com.ciqtech.quicky.mobile.passenger.permission.C2D_messaGE" android:protectionLevel="signature"/> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="com.ciqtech.quicky.mobile.passenger.permission.C2D_messaGE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_GPS"/> <uses-permission android:name="android.permission.ACCESS_LOCATION"/> <application android:allowBACkup="true" android:icon="@drawable/ic_launcher" android:label="@String/app_name" android:theme="@style/Theme.Sherlock" > <Meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="..." /> <activity android:name="com.ciqtech.quicky.mobile.passenger.activities.MainActivity" android:label="@String/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <Meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@String/app_id" /> <activity android:name="com.facebook.LoginActivity" > </activity> <activity android:name="com.ciqtech.quicky.mobile.passenger.activities.PassengerActivity" android:label="@String/title_activity_passenger" > </activity> <activity android:name="com.ciqtech.quicky.mobile.passenger.activities.LoginActivity" android:label="@String/title_activity_login" > </activity> <!-- GCM RECEIVER --> <receiver android:name="com.ciqtech.quicky.mobile.passenger.broadcast_receivers.QuickyGCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.ciqtech.quicky.mobile.passenger" /> </intent-filter> </receiver> <service android:name=".services.GCMIntentservice" android:enabled="true" /> </application> </manifest>
QuickyGCMBroadcastReceiver
package com.ciqtech.quicky.mobile.passenger.broadcast_receivers; import com.ciqtech.quicky.mobile.passenger.services.GCMIntentservice; import com.google.android.gcm.GCMBroadcastReceiver; import android.content.Context; import android.util.Log; public class QuickyGCMBroadcastReceiver extends GCMBroadcastReceiver { final String TAG = "QuickyGCMBroadcastReceiver"; @Override protected String getGCMIntentserviceClassName(Context context) { Log.d(tag,"GET GCM INTENT serviCE CLASS NAME"); return GCMIntentservice.class.getName(); } }
GCMIntentservice.设备在Android 2.3.x中正确注册,但它没有收到消息,我的消息登录onmessage从未被调用过,而在Android 4.1.x中它完美无缺.谢谢你的帮助.
package com.ciqtech.quicky.mobile.passenger.services; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Notification; import android.app.notificationmanager; import android.app.pendingIntent; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.bitmap; import android.graphics.drawable.bitmapDrawable; import android.graphics.drawable.Drawable; import android.media.@L_792_10@manager; import android.net.Uri; import android.os.Vibrator; import android.provider.SetTings.Secure; import android.support.v4.app.NotificationCompat; import android.support.v4.content.LocalBroadcastManager; import android.util.Log; import com.ciqtech.quicky.mobile.passenger.R; import com.ciqtech.quicky.mobile.passenger.activities.LoginActivity; import com.ciqtech.quicky.mobile.passenger.activities.PassengerActivity; import com.ciqtech.quicky.mobile.passenger.broadcast_receivers.Device; import com.ciqtech.quicky.mobile.passenger.configs.GCMSetTings; import com.ciqtech.quicky.mobile.passenger.dto.NotificationDTO; import com.ciqtech.quicky.mobile.passenger.utils.SessionManager; import com.google.android.gcm.GCMBaseIntentservice; import com.google.android.gms.gcm.GoogleCloudmessaging; public class GCMIntentservice extends GCMBaseIntentservice { Context ctx; SharedPreferences prefs; final String TAG = "GCMIntentservice"; NotificationCompat.builder builder; public GCMIntentservice() { super(GCMSetTings.GCM_SENDER); } @Override public void onError(Context context,String errorId) { Log.d(tag + " - onError","messaging registration error: " + errorId); } @Override protected @R_874_8487@an onRecoverableError(Context context,String errorId) { Log.d(tag + "- onRecoverableError","Received recoverable error: " + errorId); return super.onRecoverableError(context,errorId); } @Override protected void onmessage(Context context,Intent intent) { String msg = intent.getExtras().getString( "msg" ); Log.d(tag," - onmessage: " + msg); // [more code] } // Put the GCM messagE into a notification and post it. private void sendNotification(String msg) { } @Override public void onRegistered(Context context,String registrationId) { Log.d(tag + " - onRegistered","onRegistered()"); prefs = context.getSharedPreferences("Quickytaxi-Notifications",0); String deviceid = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID); SessionManager session = new SessionManager(context); String uid = session.getUserDetails().get("id"); Log.d(tag,deviceid + " " + registrationId + " " + uid); Device.register(deviceid,registrationId,uid); } @Override protected void onUnregistered(Context context,String s) { Log.d(tag + "- onUnregistered","onUnregistered()"); String deviceid = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID); Device.unregister(deviceid); } public void notify(NotificationDTO notificationDTO,Intent intent){ }
}
<receiver android:name="YOUR_PACKAGE_NAME.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="YOUR_PACKAGE_NAME" /> </intent-filter> </receiver>
之后,您的GCMBroadcastReceiver能够接收registration_id:
public void onReceive(Context context,Intent intent) { String regId = intent.getExtras().getString("registration_id"); if(regId != null && !regId.equals("")) { /* Do what ever you want with the regId eg. send it to your server */ } }
虽然我仍然收到serviCE_NOT_AVAILABLE错误,但我可以处理GCMBroadcastReceiver中的registration_id,并且我可以向我的智能手机发送消息.很奇怪,但它对我有用.
以上是大佬教程为你收集整理的GCM在android 2.3.6中不接收消息,但在android 4.1.2中有效全部内容,希望文章能够帮你解决GCM在android 2.3.6中不接收消息,但在android 4.1.2中有效所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。