GCM在android 2.3.6中不接收消息,但在android 4.1.2中有效

GCM在android 2.3.6中不接收消息,但在android 4.1.2中有效,第1张

概述我不知道我的清单问题出在哪里,问题只在于 android 2.3.6.在我的 Android 4.1.2平板电脑中,它正在接收消息.我收到了2.3.6的注册ID,但是从未收到过这些消息.请有人帮我吗?: <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res 我不知道我的清单问题出在哪里,问题只在于 android 2.3.6.在我的 Android 4.1.2平板电脑中,它正在接收消息.我收到了2.3.6的注册ID,但是从未收到过这些消息.请有人帮我吗?:

<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.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>

UPDATE

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";@OverrIDeprotected 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.ringtoneManager;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);}@OverrIDepublic voID onError(Context context,String errorID) {    Log.d(TAG + " - onError","Messaging registration error: " + errorID);}@OverrIDeprotected boolean onRecoverableError(Context context,String errorID) {    Log.d(TAG + "- onRecoverableError","Received recoverable error: " + errorID);    return super.onRecoverableError(context,errorID);}@OverrIDeprotected 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) {}@OverrIDepublic 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);}@OverrIDeprotected 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){}

}

解决方法 尝试以下解决方法,不要使用(据我所知)任何已弃用的类.将动作“com.Google.androID.c2dm.intent.REGISTRATION”添加到清单中的GCMbroadcastReceiver.这将使您能够在GCMbroadcastReceiver上接收registration_ID.

<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中有效所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1122112.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存