0

Im trying to setup GCM in my app (Just figuring out the GCM service).

So far i have a basic app that all its going to do is register and deregister with GCM.

I have been following:

https://www.youtube.com/watch?v=rmzv716SYkQ

I ran into an issue that is know regarding Android L.

11-20 14:34:31.486 24902-24902/com.android.example E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: com.android.example, PID: 24902
                                                                             java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.google.android.c2dm.intent.REGISTER (has extras) }
                                                                                 at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1720)
                                                                                 at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1749)
                                                                                 at android.app.ContextImpl.startService(ContextImpl.java:1733)
                                                                                 at android.content.ContextWrapper.startService(ContextWrapper.java:522)
                                                                                 at com.android.example.MainActivity.register(MainActivity.java:56)
                                                                                 at com.android.example.MainActivity$1.onClick(MainActivity.java:30)
                                                                                 at android.view.View.performClick(View.java:4781)
                                                                                 at android.view.View$PerformClick.run(View.java:19873)
                                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                 at android.os.Looper.loop(Looper.java:135)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5293)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

I've had a look at Google In-App billing, IllegalArgumentException: Service Intent must be explicit, after upgrading to Android L Dev Preview but I honestly dont understand the answer that is given?

My code is below:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    deactivate = (Button) findViewById(R.id.deactivate);
    activate = (Button) findViewById(R.id.activate);
    activate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            register(v);
        }
    });

    deactivate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            deregister(v);
        }
    });

}

private void deregister(View v) {
    Intent deregister = new Intent("com.google.android.c2dm.intent.UNREGISTER");
    deregister.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
    startService(deregister);
}

public void register(View view) {
    Intent register = new Intent("com.google.android.c2dm.intent.REGISTER");
    register.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
    register.putExtra("sender", "XXXXXXXXX");
    startService(register);

}
Community
  • 1
  • 1
Stillie
  • 2,647
  • 6
  • 28
  • 50

1 Answers1

0

You need to specify the class that you are registering/deregistering in the intents. Try adding register.setClass(this, MyClassToUse.class); and unregister.setClass(this, MyClassToUse.class);

phxhawke
  • 2,581
  • 23
  • 17