2012-07-03 143 views
1

我想从我的android模拟器检索我的GCM注册ID,但是当我调试程序崩溃。 这是我的MainActivity代码:Android GCM检索注册ID

try { 
     GCMRegistrar.checkDevice(this);  // <-- Crashes here 
     GCMRegistrar.checkManifest(this); 
     final String regId = GCMRegistrar.getRegistrationId(this); 
     if (regId.equals("")) 
     { 
     GCMRegistrar.register(this,Sender_ID); 
     } 
     else 
     { 
     Log.v("Registrationnnnnn", "Already registered"); 
     } 
    } 
    catch(Exception e) 
    { 
     Log.e("ErrorHAi",e.getMessage()); 
    } 

我读过,如果设备支持GCM.But我从SDK管理器中安装额外谷歌云端通讯这一行检查。我还安装了

Android SDK工具:修订版20个
的Android SDK平台工具:启12
的Android 4.1阿比16

当我提到

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> 
在我的清单文件

这一点,运行但崩溃,正如我在上面的代码中提到的那样。但是,如果将targetSdkVersion更改为xx,如here所示,它表示Install_Failed_OLDER_SDK。

我目前在Android 4.1 API级别运行该应用程序16

更新:

我的logcat:

07-03 20:34:25.878: E/Trace(906): error opening trace file: No such file or directory (2) 
07-03 22:30:57.748: E/Trace(1016): error opening trace file: No such file or directory (2) 
07-03 22:31:01.998: E/AndroidRuntime(1016): FATAL EXCEPTION: main 
07-03 22:31:01.998: E/AndroidRuntime(1016): java.lang.RuntimeException: Unable to instantiate receiver com.pack.gcm.MyBroadcastReceiver: java.lang.ClassNotFoundException: com.pack.gcm.MyBroadcastReceiver 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2210) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at android.app.ActivityThread.access$1500(ActivityThread.java:130) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at android.os.Looper.loop(Looper.java:137) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at dalvik.system.NativeStart.main(Native Method) 
07-03 22:31:01.998: E/AndroidRuntime(1016): Caused by: java.lang.ClassNotFoundException: com.pack.gcm.MyBroadcastReceiver 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2205) 
07-03 22:31:01.998: E/AndroidRuntime(1016):  ... 10 more 

现在我不知道为什么它给这样的错误,尽管我已经安装了所有的先决条件。

+0

考虑接受答案,如果你发现它很好! –

+0

我总是接受它,但如果它不能解决我的问题,那么我不会。 – Mj1992

+0

你能提供Logcat日志吗? –

回答

0

大多数Android G2DM不支持Android模拟器,因为它基本上取决于该设备有一个谷歌帐户,并且Android模拟器没有这样的帐户,所以当它尝试注册设备时,它没有找到所需的谷歌账户完成注册看看c2dm-only-registered-google-account-receives-messages-from-server

+0

我使用gcm而不是c2dm这有什么区别吗?和谷歌已经在developer.android.com举例,所以我认为这意味着它支持。 – Mj1992

+0

我读了你给的链接,他成功地检索了regID.But我卡在第一行,无法检索到REGID。 – Mj1992