Red de conocimiento informático - Conocimiento informático - Cómo empezar a utilizar Android Launcher Switcher por primera vez

Cómo empezar a utilizar Android Launcher Switcher por primera vez

La aplicación principal y su conmutador

Cualquier usuario que posea un teléfono Android debería haber utilizado una aplicación como Android Launcher. Es una aplicación que puede cambiar el entorno o el funcionamiento del escritorio, o una aplicación que puede cambiar la experiencia del usuario. (UX) programa. Personalmente, prefiero llamarlo Home App porque es un programa que se activa o ejecuta después de presionar el botón Inicio, y también es un programa de escritorio que se ejecuta en la pantalla de inicio, mientras que Launcher en un sentido estricto proviene del oficial; Aplicación de inicio predeterminada de Android, concretamente Launcher.apk. Descargué Android. Descargué la fuente de Android Froyo, el valor predeterminado es Launcher2.apk (com.android.launcher2), ubicado en {SourceDir}/packages/apps.

Las actividades pueden registrar lanzadores en AndroidManifest.xml. Launcher también se llama lanzador y no significa Launcher.apk ni ningún tipo de aplicación principal, sino que se refiere a la aplicación principal (o iniciador) donde se mostrará el punto de entrada de la aplicación. La aplicación principal generalmente no tiene un iniciador registrado, por lo que algunas personas han escrito algunos programas para detectar todas las aplicaciones principales en el sistema, a saber, Home App Switcher. The Better Switcher también proporciona la función de borrar y configurar la aplicación principal predeterminada. Tengo varias aplicaciones de inicio instaladas en mi HTC Incredible S, a saber, Launcher7, ADW, Zeam, Regina, LauncherPro, Home Sample, Home++ y, por supuesto, el HTC Sense preestablecido. De estos, sólo Zeam está clasificado como lanzador registrado, por lo que puedes encontrarlo en el menú de aplicaciones.

Intentos y filtros de intentos

En Android, los intentos son información básica extremadamente importante. Para el sistema, Intent es como una descripción de la aplicación, similar al concepto de etiquetas. Dependiendo del contenido de la intención, el sistema o la aplicación puede utilizar y buscar otras aplicaciones y los servicios que proporcionan. La información de intención se registra en AndroidManifest.xml del programa y se incluye en el contenido de la etiqueta Intent Filters. La información de intención se registra en AndroidManifest.xml del programa y se incluye en el contenido de la etiqueta Intent Filters. Cuando se busca una aplicación en el sistema, se comparan los filtros de intención de la aplicación y los criterios de búsqueda se encapsulan en un objeto de intención para encontrar programas que cumplan con criterios específicos. El contenido de Intent Filters es como un índice de la aplicación y, si la comparación es exitosa, el contenido se devuelve al ResolveInfo correspondiente. Para obtener más información sobre Intents Para obtener más información sobre Intents, consulte el enlace web oficial [1].

La actividad básicamente registra acciones y categorías en el filtro de intención de AndroidManifest.xml; la acción predeterminada es intent.ACTION_MAIN y la categoría predeterminada es intent.category_launcher. lanzador_categoría. Según la explicación en el sitio web oficial, ACTION_MAIN significa que la Actividad es el punto de entrada para el inicio; CATEGORY_LAUNCHER significa que la Actividad tiene un iniciador en la aplicación principal, es decir, el ícono de Actividad aparecerá en el menú de la aplicación para facilitar la ejecución.

categoría.LAUNCHER" />

Una aplicación puede tener múltiples actividades registradas usando CATEGORY_LAUNCHER. Por lo tanto, después de la instalación , habrá varios íconos en el menú del programa para ejecutar cada Actividad. Si la Actividad no está registrada en CATEGORY_LAUNCHER, debe registrarse al menos en CATEGORY_DEFAULT, porque este es uno de los requisitos previos para que el sistema use Intent Search para registrar CATEGORY_DEFAULT. Después de eso, la Actividad no mostrará el ícono en el menú de la aplicación, por lo que generalmente se registra como una Actividad que no es ACTION_MAIN, como intent.ACTION_VIEW, etc. Si la Actividad solo registra acciones, la búsqueda general es la Intención predeterminada. puede fallar y necesita usar Display. En el ejemplo anterior, se especifica HomeSelector para iniciarse. El ejemplo es el siguiente:

¿Ver fuente de impresión?

1 Intent i = new Intent. (this, HomeSelector.class);

2 startActivity(i);

Si especifica iniciar un programa externo, puede hacerlo de la siguiente manera:

¿Ver fuente impresa?

1 Intent myIntent = new Intent();

2 myIntent.setClassName("com.KaDaNet", "com.KaDaNet.KaDaNet_MainController");

3 startActivity( myIntent );

¿Qué pasa con la búsqueda implícita? Si ha estudiado el SDK de Android, debe haber visto el código de muestra en el SDK. La demostración de API muestra muchas actividades que utilizan el SDK. Funciones API. Estas actividades están organizadas por actividad. El contenido de la lista jerárquica se genera y clasifica dinámicamente mediante loadLabel y ActivityInfo.name MAIN, null);

2 mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE); /p>

3 PackageManager pm = getPackageManager();

4 Lista™ lt;resolveinfo> list = pm.queryIntentActivities(mainIntent, 0);

La demostración de API solo muestra información sobre actividades cuyas categorías están registradas como CATEGORY_SAMPLE_CODE.

Después de introducir condiciones en el Intent y buscarlo usando queryIntentActivities, uno de los registros de actividad tiene este aspecto:

android:theme="@style/Theme.CustomDialog">

Aplicación Home y filtro de intención

En Android, la aplicación Home necesita decirle al sistema que es una aplicación Home para que pueda ejecutarse como Home, es decir; , ejecútelo en la pantalla de inicio De manera similar, la aplicación Home puede lograr esto registrando la categoría como intent.CATEGORY_HOME en AndroidManifest.xml. Tomando como ejemplo Home en el SDK, el método es el siguiente:

<. p>

android:launchMode=" singleInstance"

android:stateNotNeeded="true">

< categoría android:name="android. intent.category.DEFAULT" />

Aplicación Search Home El procedimiento es el mismo que en la Demostración de API, utilizando queryIntentActivities en PackageManager. En el siguiente ejemplo, los resultados de la búsqueda se incluyen en un HomeInfo que contiene la información que necesitamos y se devuelven a la Lista.

¿ver código fuente?

01 Lista privada queryHomeApp() {

02 Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);

p>

03 mainIntent.addCategory(Intent.CATEGORY_HOME);

04 PackageManager pm = getPackageManager();

05 Lista rList = pm .queryIntentActivities(mainIntent, 0);

06 Lista homeList = new ArrayList();

07

08 for(ResolveInfo r : rList) {

09 listahogar. add(new HomeInfo(r, pm));

10 }

11 return homeList;

12 }

Se utiliza HomeInfo aquí Clase para encapsular cuatro tipos de información, a saber, nombre de categoría, nombre del sobre, etiqueta de actividad e icono de actividad.

01 información de inicio de clase pública {

02 nombre de cadena pública;

03 nombre de paquete de cadena pública;

04 etiqueta de cadena pública;

p>

p>

05 icono dibujable público;

06

07 HomeInfo pública (ResolveInfo rInfo, PackageManager pm) {

08 nombre = rInfo.activityInfo. nombre;

09 paqueteNombre = rInfo.actividadInfo.paqueteNombre;

10 etiqueta = rInfo.loadLabel(pm).toString();

11 icon = rInfo .loadIcon(pm);

12 }

13 }

Esto es simple, ¿verdad? Esto obtendrá la información de todas las aplicaciones principales del sistema y luego podrá cambiar la aplicación principal en función de esta información, como mencionamos antes, ¡esto es explícito!

ver código fuente?

1 public void switchHome(String packageName) {

2 Intent homeIntent = new Intent("android.intent.action. MAIN") ;

3 homeIntent.addCategory("android.intent.category.HOME");

4 homeIntent.addCategory("android.intent.category.DEFAULT");

5 homeIntent.setPackage(nombredelpaquete);

6 this.startActivity(homeIntent);

7 this.finish();

8 }

Para mostrar la información de todas las aplicaciones domésticas instaladas en la interfaz del programa, la forma más sencilla es utilizar un ListView y crear un nuevo adaptador de lista para que coincida y establezca lo que queremos cuando se presiona el elemento de la lista. Lo que debemos hacer, que es lo que intentamos hacer en el código anterior, es cambiar a otra aplicación de inicio. El código de configuración de la interfaz es el siguiente y la interfaz se muestra en la Figura 1.

ver código fuenteprint?setOnItemClickListener(new AdapterView.OnItemClickListener() {

06 @Override

07 public void onItemClick(AdapterView padre, Vista vista, posición int, ID larga) {

08 HomeListItem elemento = (HomeListItem) hAdapter.getItem(posición);

09 switchTo(item.getHomeInfo ().packageName);

10 }

11 });

Fig.1. Lista de aplicaciones de Inicio

Gestión de aplicaciones de Inicio

Una buena aplicación The Home Switcher proporcionará funciones de gestión relacionadas. En términos generales, la función básica de gestión es mostrar información.

Además de identificar todas las aplicaciones domésticas en el sistema, también debe poder mostrar información relacionada con estas aplicaciones domésticas; por supuesto, el tipo de información depende de las necesidades. En lo que respecta a las aplicaciones para el hogar, se puede dividir en información no ejecutada e información ejecutada, es decir, es posible que los usuarios quieran ver qué aplicaciones para el hogar se están ejecutando, si estas aplicaciones para el hogar se están ejecutando, también pueden ver otra información; , como información relacionada con el programa. Con base en esta información, los usuarios pueden decidir si cambiar entre las aplicaciones principales o cerrarlas. En esta sección, le mostraré cómo saber si la aplicación principal se está ejecutando, cuánta memoria ocupa mientras se ejecuta y, por supuesto, eliminar la instalación de la aplicación principal y mostrar los detalles de la aplicación.

La categoría ActivityManager [2] es una API en Android que se utiliza para interactuar con los programas que se ejecutan en el sistema. Usando esta categoría, podemos obtener una lista de todas las aplicaciones que se ejecutan y pasar un filtro de nombre de paquete específico; si la aplicación se está ejecutando, como se muestra en el siguiente ejemplo:

ver código fuente?

1 public boolean isAppRunning() {

2 for (RunningAppProcessInfo info : mAM.getRunningAppProcesses()) {

3 si (info.processName.equals(packageName)) devuelve verdadero;

4 for (String pn: info.pkgList) {

5 si (pn.equals(packageName)) devuelve verdadero;

6 }

7 }

8 devuelve falso

9 }

El mAM en la función es ActivityManager, que utiliza el método getRunningAppProcesses para obtener todas las aplicaciones en ejecución, porque Android no proporciona una función de filtro. La razón por la que necesitamos comparar los nombres de los programas primero es porque, en términos generales, los nombres de los programas de muchas aplicaciones serán los mismos que los nombres de los paquetes, por lo que utilizamos este método para acelerar la comparación. Si el nombre del paquete de la aplicación principal no coincide con el nombre del programa, debe comparar los nombres de todos los paquetes cargados en el programa.

El siguiente paso es obtener la memoria ocupada por el programa, usar getProcessMemoryInfo en ActivityManager e ingresar el ID del programa para obtener Debug.MemoryInfo. El campo RunningAppProcessInfo contiene el ID del programa, que se puede obtener a partir de la información que se acaba de obtener sobre la aplicación en ejecución. Pero, de hecho, la memoria ocupada por el programa es bastante compleja, consulte [3-6]. RSS se refiere a toda la biblioteca compartida, mientras que PSS reduce el tamaño de la biblioteca compartida proporcionalmente, siendo el denominador de la proporción la cantidad de programas que utilizan la biblioteca compartida. Usaré el PSS de todos los programas para estimar el uso de memoria, el código es el siguiente:

ver código fuente?

1 public int getMemoryUsed(ActivityManager am) {

2 Debug.MemoryInfo mInfo = am.getProcessMemoryInfo(new int[]{PID})[0];

3 return mInfo.getTotalPss();

4 }

Los usuarios pueden decidir si detener la aplicación Home en función de la cantidad de memoria que ocupa, con el fin de dejar más espacio para otro software que consume más recursos.

La API para eliminar el programa es el método killBackgroundProcesses en la categoría ActivityManager. Este método necesita registrar el permiso KILL_BACKGROUND_PROCESSES con el sistema. Su uso es el siguiente, solo proporcione el nombre del paquete de software:

ver código fuente.

1 mAM.killBackgroundProcesses(pkgName);

Después de detener la aplicación Home, el Selector de inicio necesita actualizar ListView en la pantalla, lo que se puede lograr notificando la actualización de la fuente de ListView . Android proporciona la función conveniente notificarDataSetChanged. Pero cabe señalar que esta función solo notifica actualizaciones, lo que significa que se volverá a ejecutar getView del adaptador. Si el manejo del enlace de datos no se escribe en getView, la actualización de los datos no se producirá, por lo que el enlace de datos debe manejarse antes de que se pueda actualizar la notificación.

¿ver fuente de impresión?

1 actualización nula pública() {

2 hAdapter.notifyDataSetChanged();

3 }

Las funciones restantes para eliminar instalaciones y ver detalles de la aplicación son muy simples. La actividad del sistema se inicia a través de Intent. Se debe prestar especial atención a la configuración del indicador de Intent y el URI de destino. El código del programa es el siguiente:

view sourceprint?01ACTION_DELETE, homeURI);

11 i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);

12 cont.startActivity(i);

}