It does not get registration id from GCM server the app does not give any error,this is my logcat.
07-13 16:43:39.920: I/** pushAndroidActivity **(5310): inside oncreate()
07-13 16:43:39.920: I/** pushAndroidActivity **(5310): started registration
07-13 16:43:39.920: D/GCMRegistrar(5310): resetting backoff for com.example.registration_id
07-13 16:43:39.920: V/GCMRegistrar(5310): Registering app com.example.registration_id of senders 803641917196
07-13 16:43:42.735: V/GCMBroadcastReceiver(5310): onReceive: com.google.android.c2dm.intent.REGISTRATION
07-13 16:43:42.735: V/GCMBroadcastReceiver(5310): GCM IntentService class: com.example.registration_id.GCMIntentService
07-13 16:43:42.735: V/GCMBaseIntentService(5310): Acquiring wakelock
This is the main Activity .i have used the existing gcm.jar file to use GCMRegistrar class methods.
package com.example.registration_id;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.app.Activity;
import com.google.android.gcm.GCMRegistrar;
public class MainActivity extends Activity {
private String TAG = "** pushAndroidActivity **";
EditText edittext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "inside oncreate() ");
//check if registered,if not get registration id from GCM server
if(GCMRegistrar.getRegistrationId(this).equals(""))
{
Log.i(TAG, "started registration ");
GCMRegistrar.register(this, "803641917206");
}
else
{
final String regId = GCMRegistrar.getRegistrationId(this);
Log.i(TAG, "registration id ===== "+regId);
edittext=(EditText)findViewById(R.id.msg);
edittext.setText(regId);
}
}
}
This is the service class-
package com.example.registration_id;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.google.android.gcm.GCMBaseIntentService;
public class GCMIntentService extends GCMBaseIntentService {
private static final String TAG = "===GCMIntentService===";
//default constructor
protected GCMIntentService(String senderId) {
super(senderId);
// TODO Auto-generated constructor stub
}
@Override
protected void onError(Context arg0, String arg1) {
// TODO Auto-generated method stub
Log.i(TAG, "error ");
}
@Override
protected void onMessage(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
}
@Override
protected void onRegistered(Context arg0, String registrationId) {
// TODO Auto-generated method stub
Log.i(TAG, "Device registered: regId = " + registrationId);
}
@Override
protected void onUnregistered(Context arg0, String arg1) {
// TODO Auto-generated method stub
}
}
onReceive: com.google.android.c2dm.intent.REGISTRATION
onReceiver is being called which means you are getting a message back.
protected GCMIntentService(String senderId) {
super(senderId); }
This is your problem. you must declare a public, no argument constructor for your GCMBaseIntentService subclass. Otherwise, your GCMIntentService class can't be constructed and used properly by the background services.
Why?
protected GCMIntentService(String senderID){
super(senderId);}
because this protected constructor isn't visible to the service class that handles all incoming intents, because it is in a different package.
Hardcode the senderId in a static constant in your GCMIntentService class because that will no longer change from google.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With