2011-08-25 24 views
5

Tôi muốn gửi một phát sóng từ phụ tùng của tôi với mã này:Không thể gửi cấp phát ý định từ widget, SendIntentException

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, 0, x, PendingIntent.FLAG_ONE_SHOT); 
    views.setOnClickPendingIntent(R.id.w_image, z); 
    appWidgetManager.updateAppWidget(appWidgetId, views); 
} 

Tuy nhiên, tôi nhận được lỗi này:

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 

là gì lý do cho điều này ? Bạn còn ý kiến ​​nào không? Cảm ơn, Marc

/chỉnh sửa: Tôi đã tìm thấy câu trả lời: Nó phải là Intent x = new Intent (context, WidgetClass.class);

+0

Bạn nên đánh dấu câu hỏi của mình là tự trả lời. Bạn thậm chí sẽ nhận được một huy chương để làm như vậy. – patthoyts

+0

Vâng, nhưng tôi phải chờ 8 giờ trước khi tôi có thể làm điều đó: P – Force

Trả lời

2

Tôi tìm thấy câu trả lời: Nó phải là Intent x = new Intent (context, WidgetClass.class);

10

tôi đã nhận lỗi này để:

RemoteViews: Cannot send pending intent: 
RemoteViews: android.content.IntentSender$SendIntentException 
RemoteViews: at android.app.ContextImpl.startIntentSender() 

Giải pháp là để thiết lập một độc đáo requestCode cho mỗi (gửi) PendingIntent, và cho điều này tôi đã sử dụng được cung cấp appWidgetId thay vì chỉ sử dụng một mỗi lần.

getBroadCast()

pendingActionIntent=PendingIntent.getBroadcast(this, widgetId, intentAction, pendingFlag);

getActivity()

pendingActionIntent=PendingIntent.getActivity(this, widgetId, intentAction, pendingFlag);

Đối với một số lý do nào đó nó nói nó "hiện không được sử dụng" trong tài liệu?

requestCode Private request code for the sender (currently not used).

nhưng nó hoạt động;)

+0

Tôi nghĩ rằng mã yêu cầu được sử dụng để khớp các bản cập nhật và thay thế qua PendingIntent.FLAG_CANCEL_CURRENT và PendingIntent.FLAG_UPDATE_CURRENT – nmr

+0

Và vì lý do nào đó, mã yêu cầu 0 không t làm việc – nmr

0

Tôi nghĩ rằng các mã yêu cầu được sử dụng để phù hợp với thông tin cập nhật và thay thế thông qua PendingIntent.FLAG_CANCEL_CURRENTPendingIntent.FLAG_UPDATE_CURRENT.

Các vấn đề liên quan