奇怪的是,当设备在Wifi上时,代码运行正常.当它在移动网络上时几乎总是失败(90%).
互联网上的移动数据工作正常,其他服务器 *** 作正在运行,虽然它们比Wifi慢一点.
我尝试添加一个简单的循环(不是指数等待)以在睡眠间隔后继续重试,但没有运气.
片刻我在 *** 作(GCM注册)上切换Wifi成功.
请帮忙.
****更新更多信息** **:我在我的设备上测试了GCM Demo,它也有同样的问题.移动数据失败,在Wifi上运行良好.
失败的设备是注3,目标版本是4.4.2.
奇怪的是,相同的代码在其他设备上运行良好(版本2.3.6)
GCM注册
try { String sdeviceid=null; if (checkPlayServices()) { GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); sdeviceid = getRegistrationID(context); if (sdeviceid==null) { for(int i=0;i<60;i++){ try{ sdeviceid= gcm.register(SENDER_ID); break; }catch(IOException e){ Thread.sleep(2000); continue; } } // Persist the regID - no need to register again. storeRegistrationID(context,sdeviceid); } sdeviceid = getRegistrationID(context); if (sdeviceid==null) { error=true; throw new Exception("GCM Error"); }
显示XML
<!-- Receives the actual messages. --> <action androID:name="com.Google.androID.c2dm.intent.RECEIVE" /> <!-- Receives the registration ID. --> <action androID:name="com.Google.androID.c2dm.intent.REGISTRATION" /> <category androID:name="com.planetapp.schoolink" /> </intent-filter> </receiver> <service androID:name="com.planetapp.schoolink.GCMIntentService" />
广播接收器
public class GCMbroadcastReceiver extends WakefulbroadcastReceiver { @OverrIDe public voID onReceive(Context context,Intent intent) { System.out.println("++++++++++++ON RECEIVE"); 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 */ System.out.println("++++++++++++ID RECEIVED++++++++++++"+regID); } }
}
解决方法 OP解决了他的问题并在评论中写了解决方案.解:问题解决了.在我的手机上,“Google服务”已设置“限制后台数据”.这就是Wifi关闭时“Google服务框架”或“Google Play服务”无法使用的原因.一旦我取消限制,我开始工作正常!
前往设置
寻找数据使用
寻找“Google Play服务”
当您进入另一个屏幕时:
>菜单>限制BackgroundData(检查是否已选中并取消选中它.)
总结以上是内存溢出为你收集整理的android – GCM注册:移动网络上不提供服务全部内容,希望文章能够帮你解决android – GCM注册:移动网络上不提供服务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)