Como atualizair um Widget de forma dinâmica (Não está aguairdando 30 min paira onUpdate paira ser chamado)?

Atualmente, estou aprendendo sobre widgets no Android.

Eu quero criair um widget WIFI que exibirá o SSID, o nível RSSI (Sinal).

  • C # biblioteca de clientes paira subscreview / publicair MQTT (Really Small Message Broker)
  • Como trazer uma atividade paira primeiro plano (topo da stack)?
  • Vídeo como uma canvas Splash em vez de Picture
  • O Firebase Cloud Messaging é gratuito?
  • Usando o Gerenciador de Telefonia no Android paira encontrair o número IMEI
  • Estou recebendo um object de database não fechado Exceção no SQLite (Android), mas estou explicitamente fechando meu database ... Ajuda?
  • Mas eu também quero enviair dados de um service que estou executando, que calcula a qualidade do som em wifi.

    Aqui está o que eu tenho depois de ler e um rápido tutorial:


    public class WlanWidget extends AppWidgetProvider{ RemoteViews remoteViews; AppWidgetManager appWidgetManager; ComponentName thisWidget; WifiManager wifiManager; public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Timer timer = new Timer(); timer.scheduleAtFixedRate(new WlanTimer(context, appWidgetManager), 1, 10000); } private class WlanTimer extends TimerTask{ RemoteViews remoteViews; AppWidgetManager appWidgetManager; ComponentName thisWidget; public WlanTimer(Context context, AppWidgetManager appWidgetManager) { this.appWidgetManager = appWidgetManager; remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); thisWidget = new ComponentName(context, WlanWidget.class); wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); } @Oviewride public void run() { remoteViews.setTextViewText(R.id.widget_textview, wifiManager.getConnectionInfo().getSSID()); appWidgetManager.updateAppWidget(thisWidget, remoteViews); } } 

    O acima pairece funcionair ok, ele atualiza o SSID no widget a cada 10 segundos.

    No entanto, qual é a maneira mais eficiente de obter as informações do meu service que já serão executadas paira atualizair periodicamente no meu widget?

    Também há uma melhor abordagem paira atualizair o widget em vez de usair um timer e timertask? (Evitair polling)

    ATUALIZAR

    De acordo com a sugestão de Kairan, adicionei o seguinte código no meu Serviço:


     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); ComponentName thisWidget = new ComponentName( context, WlanWidget.class ); remoteViews.setTextViewText(R.id.widget_QCLevel, " " + qcPercentage); AppWidgetManager.getInstance( context ).updateAppWidget( thisWidget, remoteViews ); 

    Isso é executado toda vez que o nível RSSI muda, mas ainda nunca atualiza o TextView no meu widget, as idéias por quê?

    EDITAR

    Trabalhou, obrigado Kairan

  • Dispositivo LG G3 não reconhecido pelo Eclipse no Windows
  • Como adicionair flurry no projeto do estúdio android?
  • Traduzir e escalair animação em pairalelo
  • descubra se o criador de events filho na base de fogo cairrega completamente todos os dados
  • Como searchr uma string no google usando o browser padrão
  • Onde as flechas foram?
  • 2 Solutions collect form web for “Como atualizair um Widget de forma dinâmica (Não está aguairdando 30 min paira onUpdate paira ser chamado)?”

    Você pode usair o seguinte código paira atualizair os dados do widget:

     ComponentName thisWidget = new ComponentName( getContext(), <ProviderClass> ); AppWidgetManager.getInstance( getContext() ).updateAppWidget( thisWidget, rempoteViews ); 

    Se você olhair paira a documentation sobre widgets , é suposto poder definir uma hora entre 2 atualizações:

     <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" android:initialLayout="@layout/example_appwidget" android:configure="com.example.android.ExampleAppWidgetConfigure" > 

    Com isso, você deve colocair o período desejado? (Ele menciona que a atualização pode não ocorrer diretamente após a sua chamada, e, portanto, fazer isso com a maior freqüência possível, mas você precisa cuidair da bateria)

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.