GCM: why my application crash in GCMRegistrar.checkDevice(this);

16,779

It's probably running on a device that doesn't support GCM, so your call to GCMRegistrar.checkDevice( this ); is throwing an exception. Check your logcat to be sure.

If you're testing it on an emulator, make sure you have the emulator set up to use Google APIs. When you create the emulator, the create new AVD window has a "Target" box. Select something in that box that says "Google APIs".

create emulator with google api

Share:
16,779
alfo888_ibg
Author by

alfo888_ibg

Updated on July 29, 2022

Comments

  • alfo888_ibg
    alfo888_ibg almost 2 years

    I have a simple application with a few lines because I am trying to figure out why my real application crashes in GCMRegistrar.checkDevice(this) (if I delete it my application doesn't crash). Can anyone help? :( :

    public class DemoActivity extends Activity {
    private String TAG = "** pushAndroidActivity **";
    private TextView mDisplay;
        @Override
        public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           GCMRegistrar.checkDevice(this);
           GCMRegistrar.checkManifest(this);
            setContentView(R.layout.main);
            mDisplay = (TextView) findViewById(R.id.display);
            mDisplay.setText("ciao");
    }
    

    Manifest:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.registrazionegcm"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />
    <permission android:name="com.example.registrazionegcm.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="com.example.registrazionegcm.permission.C2D_MESSAGE" />
    <!-- App receives GCM messages. -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <!-- GCM connects to Google Services. -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- GCM requires a Google account. -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".DemoActivity"
            android:label="@string/title_activity_demo" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="com.example.registrazionegcm" />
            </intent-filter>
        </receiver>
        <service android:name=".GCMIntentService" />
    </application>
    

    My errors :

    10-22 21:54:21.075: E/AndroidRuntime(955): FATAL EXCEPTION: main
    10-22 21:54:21.075: E/AndroidRuntime(955): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.registrazionegcm/com.example.registrazionegcm.DemoActivity}: java.lang.UnsupportedOperationException: Device does not have package com.google.android.gsf
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.os.Handler.dispatchMessage(Handler.java:99)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.os.Looper.loop(Looper.java:137)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.app.ActivityThread.main(ActivityThread.java:4745)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at java.lang.reflect.Method.invokeNative(Native Method)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at java.lang.reflect.Method.invoke(Method.java:511)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at dalvik.system.NativeStart.main(Native Method)
    10-22 21:54:21.075: E/AndroidRuntime(955): Caused by: java.lang.UnsupportedOperationException: Device does not have package com.google.android.gsf
    10-22 21:54:21.075: E/AndroidRuntime(955):  at com.google.android.gcm.GCMRegistrar.checkDevice(GCMRegistrar.java:98)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at com.example.registrazionegcm.DemoActivity.onCreate(DemoActivity.java:16)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.app.Activity.performCreate(Activity.java:5008)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
    10-22 21:54:21.075: E/AndroidRuntime(955):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
    10-22 21:54:21.075: E/AndroidRuntime(955):  ... 11 more
    10-22 21:54:21.085: W/ActivityManager(167):   Force finishing activity com.example.registrazionegcm/.DemoActivity
    10-22 21:54:21.095: W/WindowManager(167): Failure taking screenshot for (246x410) to layer 21010
    10-22 21:54:21.205: I/jdwp(265): Ignoring second debugger -- accepting and dropping
    10-22 21:54:21.395: I/Choreographer(167): Skipped 40 frames!  The application may be doing too much work on its main thread.
    10-22 21:54:21.615: W/ActivityManager(167): Activity pause timeout for ActivityRecord{411d90d0 com.example.registrazionegcm/.DemoActivity}
    10-22 21:54:22.177: I/Choreographer(265): Skipped 120 frames!  The application may be doing too much work on its main thread.
    10-22 21:54:32.339: W/ActivityManager(167): Activity destroy timeout for ActivityRecord{411d90d0 com.example.registrazionegcm/.DemoActivity}
    
  • alfo888_ibg
    alfo888_ibg over 11 years
    I have added the errors.. (how can i make sure i have the emulator set uo to use Google Apis?)
  • Lukas Knuth
    Lukas Knuth over 11 years
  • alfo888_ibg
    alfo888_ibg over 11 years
    Yes the problem was this :( I throw way 1 week for this problem :'( I am filling so stupid :'( thanks guys!
  • aimiliano
    aimiliano almost 10 years
    is this really going to work ? i have 2 failures one in nexus S and one in Nexus 4. They didn' have the GCM installed.. but i don't have them so as to test it. should I test this in the emulator?
  • Ajay Takur
    Ajay Takur over 9 years
    @aimiliano "They didn' have the GCM installed" what do you mean ?
  • aimiliano
    aimiliano over 9 years
    i mean i got this error Caused by: java.lang.UnsupportedOperationException: Device does not have package com.google.android.gsf in nexus S an 4 so how could they not have these?