GCM适用于4.1但不适用于2.3 android版本(GCM works on 4.1 but doesn't work on 2.3 android version)

编程入门 行业动态 更新时间:2024-10-25 23:22:37
GCM适用于4.1但不适用于2.3 android版本(GCM works on 4.1 but doesn't work on 2.3 android version)

我遇到GCM的问题,它在Nexus 7上运行得很好,但是当我在任何使用Gingerbread版本onRegistered方法的设备上运行它时,从未调用过。

请参阅下面的代码实现:

GMCIntentService

public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GCMIntentService"; private RestHelper restRegisterGCM; private String userRegisterGCMUrl = "User/SetGcm"; public GCMIntentService() { super(AppSettings.SENDER_ID); } /** * Method called on device registered **/ @Override protected void onRegistered(Context context, String registrationId) { Log.i(TAG, "Device registered: regId = " + registrationId); // Util.displayMessage(context, "Your device registred with GCM"); if (!GCMRegistrar.isRegisteredOnServer(this)) { restRegisterGCM = new RestHelper(userRegisterGCMUrl, RequestMethod.POST, context); restRegisterGCM.setHeader("UserName", AppSettings.getInstance().getUsername(context)); restRegisterGCM.setHeader("Password", AppSettings.getInstance().getPassword(context)); restRegisterGCM.setParameter("regId", registrationId); restRegisterGCM.execute(); } } /** * Method called on device un registred * */ @Override protected void onUnregistered(Context context, String registrationId) { Log.i(TAG, "Device unregistered"); } /** * Method called on Receiving a new message * */ @Override protected void onMessage(Context context, Intent intent) { Log.i(TAG, "Received message"); String message = intent.getExtras().getString("Message"); // notifies user generateNotification(context, message); } /** * Method called on receiving a deleted message * */ @Override protected void onDeletedMessages(Context context, int total) { Log.i(TAG, "Received deleted messages notification"); } /** * Method called on Error * */ @Override public void onError(Context context, String errorId) { Log.i(TAG, "Received error: " + errorId); Toast.makeText(context, getString(R.string.gcm_error, errorId), Toast.LENGTH_SHORT).show(); } @Override protected boolean onRecoverableError(Context context, String errorId) { // log message Log.i(TAG, "Received recoverable error: " + errorId); Toast.makeText(context, getString(R.string.gcm_recoverable_error, errorId), Toast.LENGTH_SHORT).show(); return super.onRecoverableError(context, errorId); }

GMC注册方法

private void registerGCM() {

// Make sure the device has the proper dependencies. GCMRegistrar.checkDevice(this); Boolean accountExists = false; AccountManager am = AccountManager.get(getApplicationContext()); Account[] accounts = am.getAccounts(); for (Account account : accounts) { if (account.type.equals("com.google")) { accountExists = true; break; } } if (accountExists) { // Get GCM registration id String regId = GCMRegistrar.getRegistrationId(this); // Check if regid already presents if (regId.equals("")) { // Registration is not present, register now with GCM GCMRegistrar.register(this, AppSettings.SENDER_ID); } else { // Device is already registered on GCM if (!GCMRegistrar.isRegisteredOnServer(this)) { restRegisterGCM = new RestHelper(userRegisterGCMUrl, RequestMethod.POST, EvadoFilipActivity.this); restRegisterGCM.setHeader("UserName", AppSettings.getInstance().getUsername(EvadoFilipActivity.this)); restRegisterGCM.setHeader("Password", AppSettings.getInstance().getPassword(EvadoFilipActivity.this)); restRegisterGCM.setParameter("regId", regId); restRegisterGCM.setPostExecuteMethod(2); restRegisterGCM.execute(); } } } else Toast.makeText(this, R.string.gcm_google_account_missing, Toast.LENGTH_SHORT).show(); }

更新:

我已经重命名了包,忘记在课堂上更改它:

public class GCMBroadcastReceiver extends com.google.android.gcm.GCMBroadcastReceiver{ @Override protected String getGCMIntentServiceClassName(Context context) {

return "com.mypackage.services.GCMIntentService"; } }

I am having problem with GCM, it works just fine on Nexus 7 but when I run it on any device with Gingerbread version onRegistered method is never called.

See my code implementation belowe:

GMCIntentService

public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GCMIntentService"; private RestHelper restRegisterGCM; private String userRegisterGCMUrl = "User/SetGcm"; public GCMIntentService() { super(AppSettings.SENDER_ID); } /** * Method called on device registered **/ @Override protected void onRegistered(Context context, String registrationId) { Log.i(TAG, "Device registered: regId = " + registrationId); // Util.displayMessage(context, "Your device registred with GCM"); if (!GCMRegistrar.isRegisteredOnServer(this)) { restRegisterGCM = new RestHelper(userRegisterGCMUrl, RequestMethod.POST, context); restRegisterGCM.setHeader("UserName", AppSettings.getInstance().getUsername(context)); restRegisterGCM.setHeader("Password", AppSettings.getInstance().getPassword(context)); restRegisterGCM.setParameter("regId", registrationId); restRegisterGCM.execute(); } } /** * Method called on device un registred * */ @Override protected void onUnregistered(Context context, String registrationId) { Log.i(TAG, "Device unregistered"); } /** * Method called on Receiving a new message * */ @Override protected void onMessage(Context context, Intent intent) { Log.i(TAG, "Received message"); String message = intent.getExtras().getString("Message"); // notifies user generateNotification(context, message); } /** * Method called on receiving a deleted message * */ @Override protected void onDeletedMessages(Context context, int total) { Log.i(TAG, "Received deleted messages notification"); } /** * Method called on Error * */ @Override public void onError(Context context, String errorId) { Log.i(TAG, "Received error: " + errorId); Toast.makeText(context, getString(R.string.gcm_error, errorId), Toast.LENGTH_SHORT).show(); } @Override protected boolean onRecoverableError(Context context, String errorId) { // log message Log.i(TAG, "Received recoverable error: " + errorId); Toast.makeText(context, getString(R.string.gcm_recoverable_error, errorId), Toast.LENGTH_SHORT).show(); return super.onRecoverableError(context, errorId); }

GMC registration method

private void registerGCM() {

// Make sure the device has the proper dependencies. GCMRegistrar.checkDevice(this); Boolean accountExists = false; AccountManager am = AccountManager.get(getApplicationContext()); Account[] accounts = am.getAccounts(); for (Account account : accounts) { if (account.type.equals("com.google")) { accountExists = true; break; } } if (accountExists) { // Get GCM registration id String regId = GCMRegistrar.getRegistrationId(this); // Check if regid already presents if (regId.equals("")) { // Registration is not present, register now with GCM GCMRegistrar.register(this, AppSettings.SENDER_ID); } else { // Device is already registered on GCM if (!GCMRegistrar.isRegisteredOnServer(this)) { restRegisterGCM = new RestHelper(userRegisterGCMUrl, RequestMethod.POST, EvadoFilipActivity.this); restRegisterGCM.setHeader("UserName", AppSettings.getInstance().getUsername(EvadoFilipActivity.this)); restRegisterGCM.setHeader("Password", AppSettings.getInstance().getPassword(EvadoFilipActivity.this)); restRegisterGCM.setParameter("regId", regId); restRegisterGCM.setPostExecuteMethod(2); restRegisterGCM.execute(); } } } else Toast.makeText(this, R.string.gcm_google_account_missing, Toast.LENGTH_SHORT).show(); }

UPDATE:

I have renamed packages and forget to change it in my class:

public class GCMBroadcastReceiver extends com.google.android.gcm.GCMBroadcastReceiver{ @Override protected String getGCMIntentServiceClassName(Context context) {

return "com.mypackage.services.GCMIntentService"; } }

最满意答案

确保您在要测试的设备上设置了用户帐户。 GCM要求必须在注册GCM的设备上设置Google帐户,(我认为此要求适用于Android版本<4.0)

Ensure that you have set up a user account on the device that you are testing on. GCM requires that a google account must be setup on the device that is registering for GCM, (also I think that this requirements is for android versions < 4.0)

更多推荐

context,String,public,GCM,@Override,电脑培训,计算机培训,IT培训"/> <meta name

本文发布于:2023-07-14 23:42:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1108357.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:适用于   但不   版本   GCM   work

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!