Utilizar two pendingIntent en una vista en Appwidget

Tengo una clase de widget (extendiendo AppWidgetProvider), que tiene sólo una vista (ImageView) en el diseño del widget. Cuando el usuario hace tapping en widget, se actualiza y lanza una actividad sin ningún problema. Además, el widget se actualiza cada 30 minutos y se inicia la actividad después de actualizar el widget. Mi problema es: ¿cómo puedo configurar el widget para actualizar solo cuando se actualiza automáticamente (no por el usuario haga clic)?

Aquí está mi código:

public class Widget extends AppWidgetProvider { private static final String ACTION_UPDATE = AppWidgetManager.ACTION_APPWIDGET_UPDATE; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { ComponentName cn = new ComponentName(context, Widget.class); appWidgetManager.updateAppWidget(cn, remoteView(context)); } @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if (intent.getAction().equalsIgnoreCase(ACTION_UPDATE)) { ComponentName cn = new ComponentName(context, Widget.class); AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteView(context)); Intent launch = new Intent(context, Main.class); PendingIntent pi = PendingIntent.getActivity(context, 0, launch, 0); try { pi.send(); } catch (CanceledException e) { e.printStackTrace(); } } } private RemoteViews remoteView(Context ctx) { ArrayList<Integer> imageId = new ArrayList<Integer>(); for (int i = 1; i <= 30; i++) { int drawableImageId = ctx.getResources().getIdentifier("image" + i, "drawable", ctx.getPackageName()); imageId.add(drawableImageId); } RemoteViews rv = new RemoteViews(ctx.getPackageName(), R.layout.widget); Calendar todayDate = Calendar.getInstance(); todayDate.setTimeInMillis(System.currentTimeMillis()); Calendar startDate = Calendar.getInstance(); startDate.set(2014, 05, 15); int dayDiffer = Helper.getDiffernce(todayDate, startDate); dayDiffer += 1; if (dayDiffer >= 1 && dayDiffer <= 30) { rv.setInt(R.id.img_widget, "setImageResource", imageId.get(dayDiffer - 1)); T(ctx, "in >> " + dayDiffer); } else if (dayDiffer >= 0) { T(ctx, "before >> " + dayDiffer); } else if (dayDiffer <= 31) { T(ctx, "after >> " + dayDiffer); } Intent update = new Intent(ctx, Widget.class); update.setAction(ACTION_UPDATE); PendingIntent pi_update = PendingIntent.getBroadcast(ctx, 0, update, 0); rv.setOnClickPendingIntent(R.id.img_widget, pi_update); return rv; } public void T(Context context, String string) { Toast.makeText(context, string, Toast.LENGTH_SHORT).show(); } 

}

2 Solutions collect form web for “Utilizar two pendingIntent en una vista en Appwidget”

Cambie el PendingIntent en su método "remoteView ()":

 Intent userInput = new Intent(ctx, Widget.class); userInput.setAction("LAUNCH_MAIN_ACTIVITY"); // use another action! PendingIntent pi_userInput = PendingIntent.getBroadcast(ctx, 0, userInput, 0); rv.setOnClickPendingIntent(R.id.img_widget, pi_userInput); 

Su nuevo método "onReceive ()" podría tener este aspecto:

 @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if (intent.getAction().equalsIgnoreCase(ACTION_UPDATE)) { ComponentName cn = new ComponentName(context, Widget.class); AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteView(context)); } // the launch will always be executed, // the update only for "ACTION_UPDATE" Intent launch = new Intent(context, Main.class); PendingIntent pi = PendingIntent.getActivity(context, 0, launch, 0); try { pi.send(); } catch (CanceledException e) { e.printStackTrace(); } } 

¡Espero que esto ayude!

Puede utilizar el servicio android para actualizar o iniciar la actividad automática

  • Android: Inicie el servicio con Context.startService vs PendingIntent.getService
  • Intentos pendientes no disparados
  • Enviar difusión al hacer clic en la notificación
  • Notificación RemoteView en el oyente de clics
  • Cómo recibir notificaciones cuando se notifica una notificación
  • Android: la bandera de tareas no funciona para PendingIntent
  • Crea un nuevo intento pendiente cada vez en Android
  • ¿Cómo cancelar la tarea de repetición en el Administrador de alarmas?
  • GetIntent () en onResume () siempre devuelve la misma acción, ¿cómo consumirla?
  • Servicio para la pantalla de bloqueo antes de abrir la aplicación
  • ¿Cómo utilizar PendingIntent para comunicarse desde un servicio a un cliente / actividad?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.