2010-11-19 39 views
5

Tôi đang viết một soundboard android cho phép người dùng tạo nhiều tiện ích trên máy tính để bàn, một cho mỗi âm thanh. Tôi đang sử dụng một hoạt động cho người dùng để chọn âm thanh mà anh ấy muốn tạo tiện ích. Đối với mỗi tiện ích được tạo, tôi lưu trữ tùy chọn được chia sẻ ở dạng
key => "WIDGET_FILENAME_"+widgetId, value=> fileName
Để phát âm thanh, tôi đã ghi đè phương thức onRecieve trên lớp widgetProvider. Khi tiện ích máy tính để bàn được nhấp, nó gây nên một phát sóng để phương pháp này, mà được id phụ tùng từ mục đích và sau đó tải các sở thích chia sẻ liên quan đến phụ tùng:
Android - Nhiều appWidgets phát các âm thanh khác nhau

 

int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
            AppWidgetManager.INVALID_APPWIDGET_ID); 

 

Vấn đề là: Các widgetId là luôn luôn giống nhau, không có tiện ích nào được nhấp chuột, gây ra cùng âm thanh được phát.
Bất kỳ ý tưởng hoặc hướng dẫn nào về điều này?

Trả lời

7

tôi đã cùng một vấn đề và giải quyết nó như thế này:

  1. Trong AppWidgetProviderClass của bạn, tuyên bố ý định của bạn như sau:

    Intent intent = new Intent(context, YourActivity.class) 
         .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 
         .putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    
  2. ... và PendingIntent

    PendingIntent pi = PendingIntent.getActivity(context, appWidgetId, intent, 
                  PendingIntent.FLAG_UPDATE_CURRENT); 
    
  3. Trong lớp Hoạt động, sau khi tải appWidgetId bạn muốn lên date:

    int currentWidgetId = this.getIntent().getIntExtra(
         AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
    
  4. ... bạn có thể sử dụng một chức năng tương tự với trang này:

    private void updateWidgetView() { 
        views = new RemoteViews(YourWidget.class.getPackage().getName(), 
              R.layout.main_widget); 
        mgr = AppWidgetManager.getInstance(this); 
        views.setTextViewText(R.id.some_text_view, someText); 
        // Tell the AppWidgetManager to perform an update on the current App Widget 
        mgr.updateAppWidget(currentWidgetId, views); 
    } 
    
+1

Tuyệt vời! thực sự đã giúp tôi tìm ra cùng một vấn đề mà tôi có. Điều thú vị là những gì tạo nên sự khác biệt là sử dụng appWidgetId làm requestCode trong khi trong tài liệu nói rằng điều này không bao giờ được sử dụng ... – Muzikant

+0

@Rabi, bạn có mã hoàn chỉnh hơn mà bạn có thể chia sẻ không? Tôi đã cố gắng để thực hiện điều này vào mã của tôi và nó chỉ không hoạt động. http://stackoverflow.com/questions/10607518/android-appwidget-multiple-instances – MrGibbage

0

Tôi có vấn đề này ngay bây giờ và với mã vấn đề đã biến mất, nghĩ rằng widgetAppId trong Intent và cờ Tạo mới sẽ làm cho Intent này luôn là duy nhất.

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