我想使用以下代码从我的小部件发送广播:
for (int i = 0; i < N; i++) { int appWidgetId = appWidgetIds[i]; RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widget); Intent x = new Intent(); if (isActive == true) { views.setImageViewResource(R.id.w_image,R.drawable.w_bild); x.setAction("de.bulling.smstalk.DISABLE"); } else { views.setImageViewResource(R.id.w_image,R.drawable.w_bild_off); x.setAction("de.bulling.smstalk.ENABLE"); } PendingIntent z = PendingIntent.getBroadcast(context,x,PendingIntent.FLAG_ONE_SHOT); views.setOnClickPendingIntent(R.id.w_image,z); appWidgetManager.updateAppWidget(appWidgetId,views); }
但是,我收到此错误:
E/RemoteViews(18176): Cannot send pending intent: E/RemoteViews(18176): android.content.IntentSender$SendIntentException E/RemoteViews(18176): at android.app.ContextImpl.startIntentSender(ContextImpl.java:640) E/RemoteViews(18176): at android.widget.RemoteViews$SetOnClickPendingIntent$1.onClick(RemoteViews.java:157) E/RemoteViews(18176): at android.view.View.performClick(View.java:2408) E/RemoteViews(18176): at android.view.View$PerformClick.run(View.java:8816) E/RemoteViews(18176): at android.os.Handler.handleCallback(Handler.java:587) E/RemoteViews(18176): at android.os.Handler.dispatchMessage(Handler.java:92) E/RemoteViews(18176): at android.os.Looper.loop(Looper.java:123) E/RemoteViews(18176): at android.app.ActivityThread.main(ActivityThread.java:4627) E/RemoteViews(18176): at java.lang.reflect.Method.invokeNative(Native Method) E/RemoteViews(18176): at java.lang.reflect.Method.invoke(Method.java:521) E/RemoteViews(18176): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) E/RemoteViews(18176): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) E/RemoteViews(18176): at dalvik.system.NativeStart.main(Native Method
这是什么原因?你有什么主意吗?
谢谢,
渣
/ edit:我找到了答案:它必须是Intent x = new Intent(context,WidgetClass.class);
解决方法
我有这个错误:
RemoteViews: Cannot send pending intent: RemoteViews: android.content.IntentSender$SendIntentException RemoteViews: at android.app.ContextImpl.startIntentSender()
解决方案是为每个(发送)PendingIntent设置一个唯一的requestCode,为此我使用提供的appWidgetId而不是每次只使用0.
getBroadCast()
pendingActionIntent=PendingIntent.getBroadcast(this,widgetId,
intentAction,pendingFlag );
getActivity()
pendingActionIntent=PendingIntent.getActivity(this,pendingFlag);
由于某些未知原因,它在文档中说“目前没有使用”?
requestCode Private request code for the sender (currently not used).
但它有效;)