Red de conocimiento informático - Material del sitio web - Cómo implementar un widget simple para borrar la memoria del escritorio en Android

Cómo implementar un widget simple para borrar la memoria del escritorio en Android

1. Escribir la parte de la interfaz de usuario:

Consulte la documentación de Google, primero cree una clase que herede AppWidgetProvider

importe android.appwidget.AppWidgetProvider;

La clase pública MyWidget extiende AppWidgetProvider {

}

Luego declararlo en el archivo de manifiesto. Debemos tener en cuenta que AppWidgetProvider es en realidad un BroadcastReceiver, por lo que debe registrarse como un. receptor, y luego hay algunas otras cosas a las que prestar atención:

lt;receiver android: name="com.alexchen.widget.MyWidget">

lt;intent-filter >

lt; acción android: nombre="android.appwidget.action.APPWIDGET_UPDATE" /gt;

lt /intent-filtergt; metadatos

android: name="android.appwidget.provider"

android: recurso="@xml/example_appwidget_info"

lt; /receivergt ;

android.appwidget.action.APPWIDGET_UPDATE? indica que este receptor puede aceptar una transmisión APPWIDGET_UPDATE y aquí solo se puede agregar esta acción.

android.appwidget.provider? indica que el tipo de datos son los datos proporcionados por el proveedor del widget, example_appwidget_info indica el nombre y la ubicación del archivo de configuración de parámetros de este widget

Entonces necesita estar en el directorio res Cree una carpeta xml y cree un archivo de configuración example_appwidget_info.xml en ella. La documentación de Google proporciona ejemplos con muchos parámetros. De hecho, los parámetros clave son solo los siguientes 4:

lt; appwidget-provider xmlns: android="/apk/res/android"

android: minWidth="94dp"

android: minHeight="72dp"

android: updatePeriodMillis="86400000"

android: inicialLayout="@layout/example_appwidget"gt;

lt;/appwidget-providergt;

Entre ellos, minWidth y minHeight representan el espacio mínimo ocupado por este control de widget. En términos generales, este espacio no necesita ser demasiado grande, porque si es demasiado grande, es posible que una pantalla no quepa en él. es más grande que 4x4, es posible que no se muestre.

updatePeriodMillis representa el tiempo de actualización de los datos. Aquí, 86400000 milisegundos son en realidad 24 horas. Cuando vea este parámetro por primera vez, se preguntará si puedo configurarlo en un tamaño muy pequeño y actualizarlo muchas veces por segundo. De hecho, para el parámetro updatePeriodMillis, no importa cuán pequeño lo configure, Google establece el tiempo mínimo de actualización controlado por este parámetro del control del widget en 30 minutos. La frecuencia de actualización de los datos será de 30 minutos.

El parámetro inicialLayout representa el archivo de diseño de este espacio de widget.

Luego, el siguiente paso es definir el archivo de diseño correspondiente.

Simplemente podemos crear un archivo de diseño example_appwidget.xml en el directorio de diseño

lt;?xml version="1.0" encoding="utf-8"?gt;

lt; xmlns: android="/apk/res/android"

android: layout_width="200dp"

android: layout_height="80dp"

android: fondo ="@android:color/blanco"

android:gravity="center_vertical"

android:orientation="vertical" gt

lt; /p>

android: id="@ id/tv_widget"

android: layout_width="fill_parent"

android: layout_height="wrap_content"

android: gravedad="centro"

android: text="prueba de control de widgets"

android: textColor="@android: color/negro"

android: textSize="15sp" /gt;

lt Botón

android: id="@ id/btn_clear"

android: layout_width=" wrap_content "

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android: text="borrar memoria"

android: textColor="#ff000000" /gt;

lt;/LinearLayoutgt;

En la documentación de Google se señala que no todos los componentes de diseño se pueden usar en lo anterior. El diseño tiene efecto. Los componentes o diseños válidos son:

En este punto, se escribe un control de widget simple. Podemos arrastrarlo al escritorio en el simulador para ver el efecto:

p>

2. Implementación de la parte lógica funcional

La mayoría de los controles del widget necesitan actualizar los datos mostrados anteriormente. Entonces, ¿cómo se logra esto? Revisamos el código anterior. No es difícil encontrar que en realidad este control de widget no tiene una Actividad, por lo que esta aplicación no implementa la visualización de este control. En realidad, la muestra la aplicación de escritorio, por lo que no podemos actualizar los datos directamente.

Si analizamos el receptor que escribimos anteriormente, en realidad no hay ningún método implementado.

De hecho, hay varios métodos importantes en AppWidgetProvider: onReceive, onUpdate, onDisabled, onEnabled

El método onReceive es el mismo que el método onReceive de la mayoría de los receptores de transmisión, pero aquí, la llamada al método onReceive es No lo que podemos decidir es que depende del componente Host que muestra el control del widget, que en este caso es la aplicación de escritorio de Android, por lo que nos encontraremos con que en diferentes teléfonos móviles, al arrastrar el control del widget al escritorio para su visualización, la cantidad de veces que se puede llamar a onReceive y el orden pueden ser completamente diferentes, dependiendo de cómo se implemente el componente Host.

Así que el método onReceive aquí básicamente no nos resulta útil para actualizar los datos del widget.

El método onUpdate está controlado por el parámetro updatePeriodMillis mencionado anteriormente. Después del análisis anterior, todos sabemos que su período mínimo es de 30 minutos. Por eso generalmente establecemos este parámetro en 0. Entonces, en este método, a menudo colocamos algunas funciones para iniciar el servicio de actualización de datos, porque si el servicio de actualización en segundo plano se detiene accidentalmente, se volverá a habilitar cada 30 minutos, para que no pueda iniciarse:

@Override

public void onUpdate(Context contexto, AppWidgetManager appWidgetManager,

int[] appWidgetIds) {

super.onUpdate( contexto, appWidgetManager , appWidgetIds);

// System.out.println("onUpdate");

//Reinicie el servicio a intervalos regulares para evitar que el servicio finalice en el medio No se puede reiniciar después

Intent intent = new Intent(context, UpdateWidgetService.class);

context.startService(intent);

}

Los siguientes son los dos métodos más importantes: onDisabled y onEnabled

Sabemos que se pueden arrastrar múltiples controles de widget al escritorio y el método onEnabled se usará en el primer control de widget. al arrastrarlo al escritorio, se llamará a onDisabled una vez cuando se elimine el último control del widget del escritorio. Entonces, lo que debemos hacer es habilitar un servicio que actualice los datos del widget en el método onEnabled y usar el método stopService en el. Método onDisabled para detener este servicio.

@Override

public void onDisabled(Contexto contexto) {

super.onDisabled(contexto);

System.out.println ("onDisabled");

//Detener el servicio de actualización de datos

Intent intent = new Intent(context, UpdateWidgetService.class);

context.stopService ( intención);

}

@Override

public void onEnabled(Contexto contexto) {

super.onEnabled(contexto);

System.out.println("onEnabled");

//Habilitar servicio de actualización de datos

Intent intent = new Intent(context, UpdateWidgetService.class) ;

contexto.startService(intención);

}