2012-03-16 24 views
6

Ho seguito vari Widget Tutorial come this one e this oneOnUpdate mai chiamato - Android Widget

Ho provato adattando il loro codice per i miei scopi, e ho provato straight-up copia incolla. Sembra non importa quello che faccio, il mio widget non viene MAI aggiornato. Quando viene posizionato nella schermata iniziale, il testo rimane come testo statico con cui è stato creato. Tutto ciò di cui ho bisogno per fare questa app è aggiornare 4 TextViews che saranno contenute nel layout.

Il seguente codice è per lo più copiato da una delle esercitazioni. Ho provato il debug del metodo onUpdate, tuttavia il punto di interruzione non sembra mai essere colpito.

Qualsiasi aiuto sarebbe GRANDE apprezzato.

EDIT: Sono tornato a una versione molto più semplice di questo widget che stavo provando in precedenza nei miei sforzi e sostituito il codice sottostante con il codice per il widget più semplice. Ho apportato le modifiche suggerite da CommonsWare al mio manifest. Sfortunatamente il problema rimane.

Il mio file .java principale appare in questo modo:

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); 
} 

} 

mio manifesto:

<?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> 

E il mio Provider Widget Info:

<?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"> 

risposta

7

tuo manifesta è sbagliato. Stai affermando di avere una classe network.widget.AppWidgetProvider e AFAIK, non l'hai. Hai una strana classe network.widget.NetworkWidgetActivity. È necessario utilizzare che nell'elemento <receiver>.

anche:

  • Sostituire this.getApplicationContext() e getApplicationContext() con this

  • meno che non si ha intenzione di fare più serio lavoro al servizio (banca dati di I/O, la rete di I/O, ecc), considera semplicemente di spostare tutta quella logica in onUpdate() e di eliminare il servizio, dal momento che non ti sta davvero comprando molto qui (e se il tuo è per mantenere il servizio, passa a un IntentService e sbarazzati di stopSelf() dato che è gestita per voi)

  • Mentre si sta chiedendo per 10 secondi gli aggiornamenti, la minima efficace updatePeriodMillis è di 30 minuti - basta tenere a mente durante il debug

  • int[] widgetId sembra essere inutilizzata in NetworkWidgetActivity

  • onStart() in un Service è stato ritirato per un paio d'anni; utilizzare onStartCommand() anziché

+0

Ho cambiato il mio manifest come da suggerimento e sto ancora avendo lo stesso problema ...Sono tornato a un widget più semplice che stavo provando all'inizio dei miei sforzi, fatto lo stesso cambiamento e sta avendo lo stesso problema. Ho modificato il codice sopra il codice più semplice. Vedi lo stesso problema? – Jodron

+0

@Jodron: No, quello che hai dovrebbe funzionare su Android 3.0 e versioni successive. Android 3.1 e versioni successive, è necessario svolgere un'attività con il widget dell'app: il widget dell'app non riceverà alcuna trasmissione finché l'utente non eseguirà l'attività. Questa directory contiene altri due esempi di widget dell'app, entrambi funzionanti: https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget – CommonsWare

+0

Questo è solo strano. Sono in esecuzione su 2.3, e ancora non aggiornerà il testo. Ho sbagliato a pensare che non appena il widget è posizionato "textView0" dovrebbe leggere "Ciao"? Grazie per gli esempi, li guardo e vedo se non riesco a capirlo. Penso che potrei in testa e dovrei semplicemente renderlo un'app normale. – Jodron

Problemi correlati