Google Cloud Messaging未知来源例外

时间:2013-08-07 08:46:51

标签: android google-cloud-messaging

您好我想将Google的GCM应用到我的Android应用程序中。

我链接到google play services lib

我写了以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.torasecurity.mobile.alarm.RECEIVE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />


<permission android:name="com.torasecurity.mobile.alarm.C2D_MESSAGE" 
    android:protectionLevel="signature" />
<uses-permission android:name="com.torasecurity.mobile.alarm.C2D_MESSAGE" />

一个简单的广播接收器:

  <receiver android:name=".MyReceiver" 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="YOUR_PACKAGE_NAME" />
     </intent-filter>
 </receiver>

但是在尝试注册时我得到了这个堆栈跟踪:

08-07 11:43:12.806: W/System.err(19067): java.io.IOException: MAIN_THREAD
08-07 11:43:12.826: W/System.err(19067):    at com.google.android.gms.gcm.GoogleCloudMessaging.register(Unknown Source)
08-07 11:43:12.826: W/System.err(19067):    at com.torasecurity.mobile.alarm.SplashScreen.register(SplashScreen.java:27)
08-07 11:43:12.826: W/System.err(19067):    at com.torasecurity.mobile.alarm.SplashScreen.onCreate(SplashScreen.java:56)
08-07 11:43:12.826: W/System.err(19067):    at android.app.Activity.performCreate(Activity.java:5206)
08-07 11:43:12.826: W/System.err(19067):    at 

有没有人知道我做错了什么?

1 个答案:

答案 0 :(得分:7)

很可能您正试图直接从活动注册GCM 但是register()方法访问网络,并且像执行网络操作的任何其他方法一样,它应该在一个单独的线程中运行,否则抛出异常。

解决方案是将注册内容放在一个线程中,例如AsyncTask中的注册,就像docs.registerBackground()方法一样)。