服务意图必须明确配置google cloud messenger

时间:2015-11-20 12:40:53

标签: java android android-intent google-cloud-messaging

我正在尝试在我的应用中设置GCM(只是搞清楚GCM服务)。

到目前为止,我有一个基本的应用程序,它所要做的就是注册并注销GCM。

我一直在关注:

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

我遇到了一个关于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)

我看过Google In-App billing, IllegalArgumentException: Service Intent must be explicit, after upgrading to Android L Dev Preview,但老实说我不明白给出的答案?

我的代码如下:

    @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);

}

1 个答案:

答案 0 :(得分:0)

您需要在意图中指定要注册/取消注册的类。尝试添加register.setClass(this, MyClassToUse.class);unregister.setClass(this, MyClassToUse.class);