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

前端之家收集整理的这篇文章主要介绍了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相关文章