Android Widget deja de funcionar aleatoriamente

He estado trabajando con este problema durante tres días y he mirado todas las preguntas aquí para una respuesta. Tengo un widget con un botón en él y todo lo que me gustaría hacer es iniciar un servicio cada vez que se hace clic. El problema es que el botón deja de funcionar aleatoriamente. No puedo recrearlo en absoluto y no tengo ni idea de lo que lo causa. Mis llamadas de servicio stopSelf (); Pero he tenido este problema con un receptor de difusión también, así que creo que el problema está en el widget y no en el servicio. Aquí está el código

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Log.i("Widget", "onUpdate"); final int N = appWidgetIds.length; for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; Log.i("Widget", "onUpdateLoop"); Intent intent = new Intent(context, ServiceWidgetAction.class); intent.setAction(Long.toString(System.currentTimeMillis())); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pendingIntent = PendingIntent .getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); views.setOnClickPendingIntent(R.id.widgetButton, pendingIntent); views.setTextViewText( R.id.widgetTextView, "Some text"); appWidgetManager.updateAppWidget(appWidgetId, views); } } 

He comprobado este código una y otra vez y no tengo ni idea de por qué está haciendo esto. Hace esto en 3 teléfonos separados y no puedo recrearlo. He intentado detener la aplicación, borrarla de un administrador de tareas añadiendo nuevos widgets, etc. para que el widget deje de funcionar y no lo hará. Sin embargo, cuando me desperté esta mañana el widget ya no funciona. Cualquier ayuda sería muy apreciada.

Terminé averiguando el problema. Estaba actualizando el widget desde otros lugares de la aplicación y no tenía el código completo para cada uno. En otras palabras, mi aplicación actualizó las vistas de texto en el widget como este

  RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); views.setTextViewText( R.id.widgetTextView, "Some text"); appWidgetManager.updateAppWidget(appWidgetId, views); 

Pero necesitaba el código completo para mantener el botón registrado como este:

  Intent intent = new Intent(context, ServiceWidgetAction.class); intent.setAction(Long.toString(System.currentTimeMillis())); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pendingIntent = PendingIntent .getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); views.setOnClickPendingIntent(R.id.widgetButton, pendingIntent); views.setTextViewText( R.id.widgetTextView, "Some text"); appWidgetManager.updateAppWidget(appWidgetId, views); 

Así que la línea de fondo es cuando se actualiza un widget desde su aplicación, asegúrese de que se ve exactamente como el código en el propio widget. No deje nada.

¿Instaló su widget en la tarjeta SD?

Google recomienda instalar todos los tipos de aplicación widget, alarma y receptor en el almacenamiento interno, debido a los problemas de sincronización del sistema como este.

Tal vez no la solución, sino un "debe comprobar";)

 android:installLocation="internalOnly" 
  • ¿Cuál es la diferencia para actualizar Android App Widget entre dos enfoques?
  • Adición de TextViews al widget de pantalla de inicio mediante programación
  • ¿Hay alguna forma de que los elementos de la interfaz de usuario se superpongan ligeramente (uno encima del otro) sin usar diseños absolutos?
  • SetImageViewBitmap no funciona en el widget android
  • Actividad de inicio de Android al presionar elemento ListView de widget
  • Android clicable Widget con ListView no se puede hacer clic en ListItems
  • Android: uso de la vista personalizada en el widget
  • Restaurar Administrador de alarmas después de reiniciar el teléfono
  • Cómo acceder a una base de datos SQL desde una aplicación de widget
  • Android - Obtener el widget del cronómetro
  • Configuración de Android Widget con SharedPreferences
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.