Home » Android » android – GCM: why my application crash in GCMRegistrar.checkDevice(this);

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

Posted by: admin June 15, 2020 Leave a comment

Questions:

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}
How to&Answers:

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

Answer:

Plz Follow the Following Steps

1 . Include “gcm.jar” in libs in your Application

2. Android SDK Manager => Extras => Install Google Cloud Messaging for Android Library (Obsolete)

3. Android SDK Manager => Android 4.3 (API 18) => Install Google APIs

Answer:

In eclipse

1)Download gcm.jar

2)buildpath–>configure build path–>libraries–>external jar –>path_to_gcmjar

this is the most important point

3)copy gcm.jar and paste in lib folder of project