2011-03-05 8 views
14

Soy un nuevo desarrollador de Android que intenta codificar un widget ... El parámetro "updatePeriodMillis" le dice al widget que llame al método onupdate después de la duración dada, pero no sucede así para mí. ...android widget update period milles no funciona

puede alguien por favor señalar mi error .. aquí están mis archivos

src/hellowidget.java

package de.thesmile.android.widget; 

import android.appwidget.AppWidgetProvider; 
import java.util.Random; 

import android.appwidget.AppWidgetManager; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.RemoteViews; 



public class HelloWidget extends AppWidgetProvider { 
    int number =0; 


    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 

     number = (new Random().nextInt(100)); 
     for (int appWidgetId : appWidgetIds) { 


      RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.main); 
      views.setTextViewText(R.id.TextView01, String.valueOf(number)); 
      appWidgetManager.updateAppWidget(appWidgetId, views); 

     } 

    } 


} 

xml/hello_widget_provider.xml

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

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:orientation="vertical" 

android:layout_gravity="center" 
android:layout_height="wrap_content"> 
<TextView android:text="@+id/TextView01" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><TextView android:padding="10dip" android:layout_marginTop="5dip" android:layout_gravity="center_horizontal|center" android:text="@string/widget_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/widget_textview" android:textColor="@android:color/black"></TextView> 


</LinearLayout> 

androide manifiesta

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="de.thesmile.android.widget" 
android:versionCode="1" 
android:versionName="1.0"> 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
<!-- Broadcast Receiver that will process AppWidget updates --> 
<receiver android:name=".HelloWidget" android:label="@string/app_name"> 
<intent-filter> 
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
</intent-filter> 
<meta-data android:name="android.appwidget.provider" 
android:resource="@xml/hello_widget_provider" /> 
</receiver> 
</application> 
<uses-sdk android:minSdkVersion="7" /> 
</manifest> 

Respuesta

35

El tiempo de actualización para los widgets se ve obligado a por lo menos 30 minutos, para evitar los widgets programados pobres para secar la batería. Use AlarmManager para superar esto (vea this post).

+0

muchas gracias ... :) –

0

El atributo updatePeriodMillis define con qué frecuencia la estructura del widget de la aplicación debe solicitar una actualización de AppWidgetProvider llamando al método de devolución de llamada onUpdate(). No se garantiza que la actualización real ocurra exactamente a tiempo con este valor y sugerimos que se actualice con la menor frecuencia posible, tal vez no más de una vez por hora para conservar la batería.

Si necesita actualizar con más frecuencia (es decir, 1 segundo en su caso, que no se recomienda en absoluto). Para hacerlo, configure una alarma con un Intento que recibe su AppWidgetProvider, usando el AlarmManager. Establezca el tipo de alarma en ELAPSED_REALTIME o RTC, que solo emitirá la alarma cuando el dispositivo esté en funcionamiento. Luego configure updatePeriodMillis en cero ("0").