我正在尝试在我的应用中设置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);
}
答案 0 :(得分:0)
您需要在意图中指定要注册/取消注册的类。尝试添加register.setClass(this, MyClassToUse.class);
和unregister.setClass(this, MyClassToUse.class);