2012-03-16 34 views
6

He estado siguiendo varios tutoriales de widgets como this one y this oneOnUpdate nunca llamó - Widget Android

He intentado adaptar su código para mis propósitos, y he intentado recta de copiar y pegar. Parece que no importa lo que haga, mi widget NUNCA se actualiza. Cuando se coloca en la pantalla de inicio, el texto permanece como el Texto estático con el que se creó. Todo lo que necesito para esta aplicación es actualizar 4 TextViews que se incluirán en el diseño.

El código siguiente se copia principalmente de uno de los tutoriales. He intentado depurar el método onUpdate, sin embargo, el punto de ruptura nunca parece ser golpeado.

Cualquier ayuda sería GRANMENTE apreciada.

EDITAR: Volví a una versión mucho más simple de este widget que estaba intentando antes en mis esfuerzos y reemplacé el código a continuación con el código para el widget más simple. Hice los cambios sugeridos por CommonsWare a mi manifiesto. Lamentablemente, el problema persiste.

Mi principal archivo .java se ve así:

public class NetStatWidget extends AppWidgetProvider 
{ 

public void onUpdate(Context context, AppWidgetManager manager, int[] appWidgetIds) 
{ 
    ComponentName thisWidget = new ComponentName(context, NetStatWidget.class); 
    int[] widgetId = manager.getAppWidgetIds(thisWidget); 

    RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.appwidget); 
    remoteView.setTextViewText(R.id.textView0, "Hello"); 
    manager.updateAppWidget(widgetId, remoteView); 
} 

} 

Mi Manifiesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="net.stat" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="10" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 


      <receiver android:name="NetStatWidget" > 
       <intent-filter> 
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
       </intent-filter> 
       <meta-data 
        android:name="android.appwidget.provider" 
        android:resource="@xml/providerinfo" /> 
      </receiver> 

    </application> 

</manifest> 

Y mi Proveedor de Información Widget:

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:initialLayout="@layout/main" 
android:minWidth="146dip" 
    android:minHeight="72dip" 
    android:updatePeriodMillis="10000"> 

Respuesta

7

Su manifiesto es incorrecto. Usted afirma que tiene una clase network.widget.AppWidgetProvider, y AFAIK, no. Tienes una clase extrañamente llamada network.widget.NetworkWidgetActivity. Necesita usar que en su elemento <receiver>.

también:

  • Reemplazar this.getApplicationContext() y getApplicationContext() con this

  • A menos que piense en hacer el trabajo más serio en el servicio (base de datos de E/S, la red de E/S, etc.), considere simplemente mover toda esa lógica al onUpdate() y deshacerse del servicio, ya que en realidad no le está comprando mucho aquí (y si es va a mantener el servicio, cambie a IntentService y deshágase de stopSelf(), ya que lo maneja para usted)

  • Mientras que usted está pidiendo 10 segundos de actualizaciones, la mínima efectiva updatePeriodMillis es de 30 minutos - sólo mantener eso en mente mientras depura

  • int[] widgetId parece ser sin usar en NetworkWidgetActivity

  • onStart() en un Service ha estado en desuso por un par de años; use onStartCommand() en su lugar

+0

Cambié mi manifiesto según su sugerencia y sigo teniendo el mismo problema ...Volví a un widget más simple que estaba intentando al principio de mis esfuerzos, hice el mismo cambio y está teniendo el mismo problema. Edité el código de arriba para reflejar el código más simple. ¿Ves el mismo problema? – Jodron

+0

@Jodron: No, lo que tienes allí debería funcionar en Android 3.0 y versiones posteriores. Android 3.1 y superior, necesita una actividad para su widget de aplicación: su widget de aplicación no recibirá transmisiones hasta que el usuario ejecute la actividad. Este directorio contiene otros dos ejemplos de widgets de aplicaciones, ambos funcionan: https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget – CommonsWare

+0

Eso es simplemente extraño. Lo estoy ejecutando en 2.3, y todavía no actualizará el texto. ¿Me equivoco al pensar que tan pronto como se coloque el widget, "textView0" debería decir "Hola"? Gracias por los ejemplos, revisaré esos y veré si no puedo resolverlo. Creo que podría haberlo superado y debería convertirlo en una aplicación normal. – Jodron

Cuestiones relacionadas