2011-06-18 16 views
0

thisチュートリアル私はボタン付きのウィジェットを作成しました。下のコードで、ButtonP1をクリックすると、トーストメッセージが表示されます。私はButtonP2でも同じことをしようとしますが、ButtonP1に設定されているトーストメッセージは1つのみです。ユーザーがButtonP2をクリックすると、別のトーストメッセージが表示されます。Android Widgetボタン

public class HelloWidget extends AppWidgetProvider { 

    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget"; 
    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget"; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     context.startService(new Intent(context, UpdateService.class)); 

     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetmain); 

     Intent active = new Intent(context, HelloWidget.class); 
     active.setAction(ACTION_WIDGET_RECEIVER); 
     active.putExtra("msg", "Message for Button P1"); 

     PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 
     remoteViews.setOnClickPendingIntent(R.id.ButtonP1, actionPendingIntent); 

     Intent active2 = new Intent(context, HelloWidget.class); 
     active2.setAction(ACTION_WIDGET_RECEIVER); 
     active2.putExtra("msg", "Message for Button P2"); 

     PendingIntent actionPendingIntent2 = PendingIntent.getBroadcast(context, 0, active2, 0); 
     remoteViews.setOnClickPendingIntent(R.id.ButtonP2, actionPendingIntent2); 

     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
    } 

@Override 
public void onReceive(Context context, Intent intent) { 

    final String action = intent.getAction(); 
    if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) 
    { 
     final int appWidgetId = intent.getExtras().getInt(
       AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID); 
     if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) 
     { 
      this.onDeleted(context, new int[] { appWidgetId }); 
     } 
    } 
    else 
    { 
     if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) 
     { 
      String msg = "null"; 
      try { 
       msg = intent.getStringExtra("msg"); 
       } catch (NullPointerException e) { 
       Log.e("Error", "msg = null"); 
       } 
       Toast.makeText(context, "Out: " + msg, Toast.LENGTH_SHORT).show(); 
     } 
     super.onReceive(context, intent); 
    } 
} 
} 

ライン場合、私は同じした後、この(代わりACTION_WIDGET_RECEIVERのACTION_WIDGET_RECEIVER2)

if (intent.getAction().equals(ACTION_WIDGET_RECEIVER2)) 
       { 
        String msg2 = "null"; 
        try { 
         msg2 = intent.getStringExtra("msg2"); 
         } catch (NullPointerException e) { 
         Log.e("Error", "msg = null"); 
         } 
         Toast.makeText(context, "Out2: " + msg2, Toast.LENGTH_SHORT).show(); //null 
       } 

Intent active2 = new Intent(context, HelloWidget.class); 
    active2.setAction(ACTION_WIDGET_RECEIVER2); 
    active2.putExtra("msg", "Message for Button P2"); 

    PendingIntent actionPendingIntent2 = PendingIntent.getBroadcast(context, 0, active2, 0); 
    remoteViews.setOnClickPendingIntent(R.id.ButtonP2, actionPendingIntent2); 

を試みました。その場合msg2変数はnullです。

答えて

2

ブロードキャストを実行するPendingIntentを取得するときは、別の要求コードを使用する必要があります。そうでない場合、PendingIntent.getBroadcast(..)は、あなたの最初のインテントからのメッセージと共に、あなたのケースの既存のものを返します。

private static final int REQUEST_CODE_ONE = 10; 
private static final int REQUEST_CODE_TWO = 20; 

.... 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    .... 
    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE_ONE, active, 0); 
    .... 

    PendingIntent actionPendingIntent2 = PendingIntent.getBroadcast(context, REQUEST_CODE_TWO, active2, 0); 
    .... 
}