2011-01-14 22 views
11

Xin chào, tôi đã cố gắng gửi thêm dữ liệu qua PendingIntent.Gửi dữ liệu EXTRA qua sự cố PendingIntent

Đây là mã của tôi

//**1** 
    Intent intent = new Intent(context, UpdateService.class); 
      intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
    appWidgetId); 
      intent.putExtra(BaseConfigurationActivity.EXTRA_WIDGET_MODE, 
    2); 
      // put appWidgetId here or intent will replace an intent of 
    another widget 
      PendingIntent pendingIntent = 
    PendingIntent.getService(context, appWidgetId, intent, 
    PendingIntent.FLAG_UPDATE_CURRENT); 
      views.setOnClickPendingIntent(R.id.gridview_button, 
    pendingIntent); 

//**2** 
      intent = new Intent(context, UpdateService.class); 
      intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
    appWidgetId); 
      intent.putExtra(BaseConfigurationActivity.EXTRA_WIDGET_MODE, 
    1); 
      // put appWidgetId here or intent will replace an intent of 
    another widget 
      pendingIntent = PendingIntent.getService(context, appWidgetId, 
    intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      views.setOnClickPendingIntent(R.id.listview_button, 
    pendingIntent); 

Trong mã của tôi nó gán pendingIntent đến hai nút gridview_button với EXTRA_WIDGET_MODE 2 và listview_button với EXTRA_WIDGET_MODE 1

khi tôi bấm vào gridview_button và nó gọi UpdateService lớp tôi cũng có giá trị EXTRA_WIDGET_MODE là "1"

Tôi đang làm gì sai?

+1

Bạn cần cung cấp thêm một số chi tiết cho chúng tôi. Vấn đề chính xác của bạn là gì? Bạn có bất kỳ lỗi nào không? Nếu có, bạn có thể đăng stacktrace không? –

+1

xin lỗi vì câu hỏi không rõ ràng. Trong mã "gridview_button" có PendingIntent với dữ liệu EXTRA "EXTRA_WIDGET_MODE" = "2" khi tôi chạy mã của mình, tôi cũng có giá trị EXTRA_WIDGET_MODE "1" – SnowBEE

+0

Viết câu trả lời của riêng bạn, sau đó chấp nhận câu trả lời. – mad

Trả lời

22

Cuối cùng tôi thấy vấn đề này xảy ra bởi vì tôi gửi cùng "requestCode"

PendingIntent.getService(context, appWidgetId 

Nó phải là như thế này

PendingIntent.getService(context, 0 
PendingIntent.getService(context, 1 
+2

cũng nếu bạn chỉ thay đổi dữ liệu gói, hãy đặt hành động thành một cái gì đó như 'foo1' và 'foo2' hoạt động ... nghĩa là intent.setAction ("action1"); // vì mã yêu cầu kỹ thuật chưa được hỗ trợ đầy đủ . – danmayer

3

Câu trả lời đúng Tôi đoán sẽ sử dụng cờ

FLAG_UPDATE_CURRENT 

Thao tác này sẽ sử dụng lại các mục đích đang chờ xử lý hiện có nhưng thay thế dữ liệu bổ sung của chúng.

+2

Tôi đoán đây là vấn đề, không phải là giải pháp (tôi chạy vào cùng một đầu dò). Nếu bạn cần nhiều pendingIntents mà chỉ khác nhau về ExtraData, sau đó FLAG_UPDATE_CURRENT làm như nó nói: nó sẽ ghi đè các pendingIntents đang tồn tại. – Bachi

7
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_ONE_SHOT); 

Thay đổi cờ thành PendingIntent.FLAG_ONE_SHOT.

1

Tôi thấy rằng nếu Intent đã được sử dụng để tạo mục đích Pending có bất kỳ phần bổ sung nào đã có trong đó thì tính năng bổ sung của intent mới bị bỏ qua. Ví dụ, nếu bạn làm theo các mẫu trong các tài liệu Android để xây dựng một Widget như vậy

Intent toastIntent = new Intent(context, StackWidgetProvider.class); 
toastIntent.setAction(StackWidgetProvider.TOAST_ACTION); 
toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 0, toastIntent, 
PendingIntent.FLAG_UPDATE_CURRENT); 
rv.setPendingIntentTemplate(R.id.stack_view, toastPendingIntent); 

Sau đó dòng

toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 

sẽ ngăn chặn tính năng bổ sung ý mới của bạn không bị dính. Tôi đã xóa dòng đó và nội dung của tôi đã hoạt động

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