2012-04-09 26 views
8

he desarrollado un widget de Android con botones mutiple en él. funciona bien y añado por primera vez. pero cuando reinicio, los botones del dispositivo no se disparan. aquí es lo que hagowidget de Android con múltiples botones

aquí se xml de configuración

<receiver android:name="com.islem.widget.MyWidgetMain" android:label="@string/app_name"> 
<intent-filter> 
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    <!-- Broadcast Receiver that will also process our self created action --> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER1"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER2"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER3"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER4"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER5"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER6"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RELOAD_ALARM"/> 

</intent-filter> 
<meta-data android:name="android.appwidget.provider" android:resource="@xml/k_widget_provider" /> 

aquí está el método onUpdate

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {  

    for (int appWidgetId : appWidgetIds) { 

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

     Intent refreshButtonIntent = new Intent(context, KalanWidgetMain.class); 
     refreshButtonIntent.setAction(ACTION_WIDGET_RECEIVER1); 

     Intent voiceTabIntent = new Intent(context, KalanWidgetMain.class); 
     voiceTabIntent.setAction(ACTION_WIDGET_RECEIVER2); 

     Intent dataTabIntent = new Intent(context, KalanWidgetMain.class); 
     dataTabIntent.setAction(ACTION_WIDGET_RECEIVER3); 

     Intent smsTabIntent = new Intent(context, KalanWidgetMain.class); 
     smsTabIntent.setAction(ACTION_WIDGET_RECEIVER4); 

     Intent prevButtonIntent = new Intent(context, KalanWidgetMain.class); 
     prevButtonIntent.setAction(ACTION_WIDGET_RECEIVER5); 

     Intent nextButtonIntent = new Intent(context, KalanWidgetMain.class); 
     nextButtonIntent.setAction(ACTION_WIDGET_RECEIVER6); 

     refreshButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     voiceTabIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     dataTabIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     smsTabIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     prevButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     nextButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 

     PendingIntent refreshButtonPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, refreshButtonIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
     PendingIntent voiceTabPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, voiceTabIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     PendingIntent dataTabPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, dataTabIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     PendingIntent smsTabPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, smsTabIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
     PendingIntent prevButtonPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, prevButtonIntent, 0); 
     PendingIntent nextButtonPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, nextButtonIntent, 0); 

     remoteViews.setOnClickPendingIntent(R.id.kalanRefresh, refreshButtonPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanTabVoiceBg, voiceTabPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanTabDataBg, dataTabPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanTabSMSBg, smsTabPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanPrev, prevButtonPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanNext, nextButtonPendingIntent); 
     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 

     KalanUpdater.registerWidget(context, appWidgetManager, appWidgetId); 
     appWidgetManager.updateAppWidget(appWidgetId, remoteViews); 
    } 
} 

aquí está el método OnReceive

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

    System.out.println("on onReceive");  
    Toast.makeText(context, "onReceive", Toast.LENGTH_SHORT).show(); 

    // v1.5 fix that doesn't call onDelete Action 
    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_RECEIVER1) || intent.getAction().equals(ACTION_WIDGET_RECEIVER2) || 
       intent.getAction().equals(ACTION_WIDGET_RECEIVER3) || intent.getAction().equals(ACTION_WIDGET_RECEIVER4) || 
       intent.getAction().equals(ACTION_WIDGET_RECEIVER5) || intent.getAction().equals(ACTION_WIDGET_RECEIVER6) || 
       intent.getAction().equals(ACTION_WIDGET_RELOAD_ALARM) 
       ) {    
      int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
      System.out.println("appWidgetId:" + appWidgetId + ", action:" + action); 




     } 


     super.onReceive(context, intent); 
    } 
} 

Respuesta

0

Cuando teléfono re start, llamará onEnable en lugar de onUpdate.

--update--

int[] allids = AppWidgetManager 
.getInstance(Context) 
.getAppWidgetIds(new ComponentName(Context, YourAppWidgetProvider.class); 

Esto hará que todos los identificadores que se encuentra bajo el control de YourAppWigetProvider. Leer más en this

+0

He movido el contenido de onupdate en un método y llamando desde onEnabled y onUpdate como a continuación pero no funciona. y también puedo ver el registro de Actualización cuando reinicio. \t @ Override \t public void onEnabled (contexto Contexto) { \t \t // TODO Auto generados por el método talón de \t \t super.onEnabled (contexto); \t \t Toast.makeText (context, "onEnabled", Toast.LENGTH_SHORT) .show(); \t \t \t \t \t \t int [] appWidgetIds = AppWidgetManager.getInstance (contexto) .getAppWidgetIds (nuevo ComponentName (contexto, KalanWidgetMain.class)); \t \t startWidget (contexto, AppWidgetManager.getInstance (context), appWidgetIds); \t} – ysnky

+0

no eliminar de onUpdate simplemente copiar en onEnabled –

Cuestiones relacionadas