Android GCM InstanceId.getToken() – > java.io.IOException:TIMEOUT

我正在尝试在我的 Android应用程序中实现推送通知,但我目前停留在接收令牌的时候.

我正在使用最新的“InstanceID”方法,并遵循一些例子.
我已经将权限和服务添加到我的Manifest(并添加了他们的代码aswell),但无论我尝试,我总是得到“java.io.IOException:TIMEOUT”错误.我尝试过不同的手机,wifi,Lte和3G,但似乎没有任何改变.

我没有得到错误说“SERVICE_NOT_AVAILABLE”.只停留在这一个.

表现

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<receiver
  android:name="com.google.android.gms.gcm.GcmReceiver"
  android:exported="true"
  android:permission="com.google.android.c2dm.permission.SEND" >
  <intent-filter>
      <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="de.company.appname" />
  </intent-filter>
</receiver>
<service
  android:name="de.company.gcm.ModuleGCMListenerService"
  android:exported="false" >
  <intent-filter>
     <action android:name="com.google.android.c2dm.intent.RECEIVE" />
  </intent-filter>
</service>
<service
  android:name="de.company.gcm.ModuleInstanceIDListenerService"
  android:exported="false">
  <intent-filter>
    <action android:name="com.google.android.gms.iid.InstanceID"/>
  </intent-filter>
</service>

InstanceID调用

try 
{
  token = instanceID.getToken(
            senderId,GoogleCloudMessaging.INSTANCE_ID_ScopE,null);
} 
catch (IOException e) 
{
  e.printstacktrace();
}

instanceID.getId()正在工作.

W/InstanceID/Rpc: No response android.os.ConditionVariable@129d5713
W/System.err: java.io.IOException: TIMEOUT
W/System.err:   at com.google.android.gms.iid.zzc.zzb(UnkNown Source)
W/System.err:   at com.google.android.gms.iid.zzc.zza(UnkNown Source)
W/System.err:   at com.google.android.gms.iid.InstanceID.zzc(UnkNown Source)
W/System.err:   at com.google.android.gms.iid.InstanceID.getToken(UnkNown Source)

解决方法

代码中同样的位置搜索类似的错误时,我终于弄清楚了我的问题.

New GCM API Register Unknown Source Error

在这种情况下,错误“MAIN_THREAD”的确更明显.

所以这是因为在主线程中不能调用InstanceId.getToken().

虽然它不适用于Google Github示例中所建议的新的AsyncTask< Void,Void,Void>()方法.

我不得不使用

new Thread(new Runnable() {
    public void run() {
        //code
    }
}).start();

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...