Google cloud messaging unable to initialize receiver

Im following the tutorial here: http://developer.android.com/google/gcm/gs.html

I seem to have some problems registering my translator

I get the following error when starting the application right after registering the device and getting the registration ID

java.lang.RuntimeException: unable to instantiate receiver com.google.android.gcm.GCMBroadcastReceiver: java.lang.ClassNotFoundException: com.google.android.gcm.GCMBroadcastReceiver

Here is the full stackTrace:

06-19 01: 08: 03.994: E / AndroidRuntime (23867): FATAL EXCEPTION: main 06-19 01: 08: 03.994: E / AndroidRuntime (23867): java.lang.RuntimeException: Cannot instantiate the com.google receiver. android.gcm.GCMBroadcastReceiver: java.lang.ClassNotFoundException: com.google.android.gcm.GCMBroadcastReceiver 06-19 01: 08: 03.994: E / AndroidRuntime (23867): with android.app.ActivityThread.handleReceiver (ActivityThread.java: 2111) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at android.app.ActivityThread.access $ 1500 (ActivityThread.java:127) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1208) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at android.os.Handler.dispatchMessage (Handler.java:99) 06- 19 01: 08: 03.994: E / AndroidRuntime (23867): at android.os.Looper.loop (Looper.java:137) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): with android.app. Act ivityThread.main (ActivityThread.java:4441) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at java.lang.reflect.Method.invokeNative (native method) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at java.lang.reflect.Method.invoke (Method.java∗11) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:784) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java►51) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at dalvik.system.NativeStart.main (native method) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): called: java.lang.ClassNotFoundException: com.google .android.gcm.GCMBroadcastReceiver 06-19 01: 08: 03.994: E / AndroidRuntime (23867): with dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:61) 06-19 01: 08: 03.994: E / AndroidRuntime ( 23867): at java.lang.ClassLoader.loadC lass (ClassLoader.javaPoint01) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at java.lang.ClassLoader.loadClass (ClassLoader.java:461) 06-19 01: 08: 03.994: E / AndroidRuntime (23867): at android.app.ActivityThread.handleReceiver (ActivityThread.java:2106)

Here is the complete manifest, with some of the actions disabled

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.gotoohlala" android:versionCode="48" android:versionName="4.1.2" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" /> <uses-feature android:name="android.hardware.camera" /> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true" /> <application android:hardwareAccelerated="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="com.google.android.maps" /> <!-- Push notification --> <receiver android:name="pushNotification.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.gotoohlala" /> </intent-filter> </receiver> <!-- Push notification END --> <activity android:name="launchOohlala.LaunchOohlala" android:label="@string/app_name" android:theme="@android:style/Theme.Light.NoTitleBar" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="launchOohlala.FakeLogin" android:label="@string/app_name" android:theme="@android:style/Theme.Light.NoTitleBar" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="launchOohlala.CheckEmail" android:label="@string/app_name" android:windowSoftInputMode="stateHidden|adjustResize" android:theme="@android:style/Theme.Light.NoTitleBar" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="discoverMyCampus.RulesFragment" android:label="@string/app_name" android:windowSoftInputMode="stateHidden|adjustResize" android:theme="@android:style/Theme.Light.NoTitleBar" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </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.gotoohlala" /> </intent-filter> </receiver> <service android:name=".GCMIntentService" /> <activity android:name="com.facebook.LoginActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/applicationId" /> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyDP2zfbRiEH0mNCkn2lpxm92DQHsfIJfPU" /> </application> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.VIBRATE" /> <!-- Wifi related --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="com.gotoohlala.gcm.permission.C2D_MESSAGE" /> <permission android:name="com.gotoohlala.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.gotoohlala.permission.C2D_MESSAGE" /> <!-- App receives GCM messages. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <!-- 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" /> <uses-feature android:name="android.hardware.telephony" android:required="false" /> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> <permission android:name="com.gotoohlala.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="com.gotoohlala.permission.MAPS_RECEIVE"/> </manifest> 

My class is GCMBroadcastReceiver

 package pushNotification; import com.google.android.gms.gcm.GoogleCloudMessaging; import com.gotoohlala.OohlalaMain; import discoverMyCampus.RulesFragment; import android.app.Activity; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.support.v4.app.NotificationCompat; import android.util.Log; /** * Handling of GCM messages. */ public class GCMBroadcastReceiver extends BroadcastReceiver { static final String TAG = "GCMDemo"; public static final int NOTIFICATION_ID = 1; private NotificationManager mNotificationManager; NotificationCompat.Builder builder; Context ctx; @Override public void onReceive(Context context, Intent intent) { Log.d("SUCCESS SUCCESS", "ONRECEIVE HAS BEEN CALLED, WOOT WOOT!!"); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); Log.d("SUCCESS SUCCESS", "ONRECEIVE HAS BEEN CALLED, WOOT WOOT!!"); ctx = context; String messageType = gcm.getMessageType(intent); if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { sendNotification("Send error: " + intent.getExtras().toString()); } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) { sendNotification("Deleted messages on server: " + intent.getExtras().toString()); } else { sendNotification("Received: " + intent.getExtras().toString()); } setResultCode(Activity.RESULT_OK); } // Put the GCM message into a notification and post it. private void sendNotification(String msg) { mNotificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, new Intent(ctx, RulesFragment.class), 0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ctx) .setContentTitle("GCM Notification") .setContentText(msg); mBuilder.setContentIntent(contentIntent); mNotificationManager.notify(NOTIFICATION_ID, mBuilder.getNotification()); } } 

Any ideas as to why I cannot register the receiver? Thanks

+4
source share
2 answers

The app is looking for com.google.android.gcm.GCMBroadcastReceiver , but your class is in another pushNotification.GCMBroadcastReceiver package.

And the package of your application is different from it - com.myAppName .

While your GCMBroadcastReceiver should not be in the same package as your application package, the category in the intent filter should be the application package.

You should change this:

  <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="pushNotification" /> </intent-filter> 

For this:

  <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.myAppName" /> </intent-filter> 

EDIT:

Depending on your manifest, you have additional errors:

You indicate the broadcast receiver twice. If you want to use your own receiver, you must remove this part:

  <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.gotoohlala" /> </intent-filter> </receiver> 

Another problem:

Remove this line:

 <uses-permission android:name="com.gotoohlala.gcm.permission.C2D_MESSAGE" /> 

Since you already have these lines (which are correct):

 <permission android:name="com.gotoohlala.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.gotoohlala.permission.C2D_MESSAGE" /> 
+5
source

Try checking library v.4. Propreties-> Java Build Path-> Order and Export

-1
source

Source: https://habr.com/ru/post/1486970/


All Articles