1. Requisitos
Debe tener lo siguiente instalado y configurado en su máquina de desarrollo:
- Android SDK y herramientas de plataforma
- Eclipse IDE 3.7.2 o superior con el complemento ADT
- un emulador o dispositivo Android con Android 2.2 o superior
Puede descargar el SDK y las herramientas de plataforma del portal para desarrolladores de Android.
- ¿Existe una aplicación que pueda tomar el lugar de un lavalier?
- ¿Es el lenguaje Kotlin similar a Java?
- ¿Cuáles son las aplicaciones más útiles que usa todos los días?
- ¿Por qué las aplicaciones de Apple en Android se ajustan al diseño de materiales, mientras que las aplicaciones de Google en iOS no se ajustan al diseño de iOS?
- ¿Cómo obtengo alertas de emergencia en Android?
2. Configuración del proyecto
Inicie Eclipse y cree un nuevo proyecto de aplicación para Android. Estoy nombrando la aplicación SimpleLauncher , pero puedes nombrarla como quieras. Asegúrate de usar un paquete único. La versión de SDK más baja que admite nuestro lanzador es Froyo y el SDK de destino es Jelly Bean .
Como no queremos crear una Activity
, anule la selección de Crear Actividad . Haga clic en Finalizar para continuar.
3. Manifiesto del proyecto
El siguiente paso es modificar el archivo AndroidManifest.xml agregando dos actividades. La primera Activity
muestra la pantalla de inicio. Llamémoslo HomeActivity
como se muestra a continuación.
<actividad
android: name = “ah.hathi.simplelauncher.HomeActivity”
android: label = “Inicio del iniciador simple”
android: theme = “@ android: style / Theme.Wallpaper.NoTitleBar.Fullscreen”
android: launchMode = “singleTask”
android: stateNotNeeded = “true”
>
Al agregar las categorías android.intent.category.HOME
y android.intent.category.DEFAULT
al grupo de intent-filter
, la Activity
asociada se comporta como un iniciador y aparece como una opción cuando presiona el botón de inicio del dispositivo.
También debemos configurar launchMode
en singleTask
para asegurarnos de que el sistema mantenga una sola instancia de esta Activity
en cualquier momento. Para mostrar el fondo de pantalla del usuario, configure el tema en Theme.Wallpaper.NoTitleBar.FullScreen
.
La segunda Activity
que necesitamos agregar muestra las aplicaciones que están instaladas en el dispositivo del usuario. También es responsable del lanzamiento de aplicaciones. No necesitamos ninguna configuración especial para esta Activity
. AppsListActivity
.
<actividad
android: name = “ah.hathi.simplelauncher.AppsListActivity”
android: theme = “@ android: style / Theme.NoTitleBar.Fullscreen”
>
4. Diseños de actividades
Cree un archivo XML para la clase HomeActivity
en la carpeta res / layout del proyecto y asígnele el nombre activity_home.xml . El diseño tiene un solo Button
que responde a los eventos de clic. Al hacer clic en el botón, el usuario pasa de la pantalla de inicio a la lista de aplicaciones.
<RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android"
xmlns: tools = “http://schemas.android.com/tools”
android: layout_width = “match_parent”
android: layout_height = “match_parent”
herramientas: contexto = “. HomeActivity”>
<Botón
android: id = “@ + id / apps_button”
android: layout_width = “wrap_content”
android: layout_height = “wrap_content”
android: layout_alignParentRight = “true”
android: layout_alignParentTop = “true”
android: layout_marginRight = “10dp”
android: layout_marginTop = “10dp”
android: text = “Mostrar aplicaciones”
android: onClick = “showApps”
/>
A continuación, cree un archivo XML para la clase AppsListActivity
en la carpeta res / layout del proyecto y AppsListActivity
el nombre activity_apps_list.xml . El diseño contiene un ListView
que ocupa toda la pantalla.
<LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android"
android: layout_width = “match_parent”
android: layout_height = “match_parent”
android: orientación = “vertical”>
<ListView
android: id = “@ + id / apps_list”
android: layout_width = “match_parent”
android: layout_height = “match_parent”
>
Finalmente, cree un tercer archivo XML en la misma ubicación y asígnele el nombre list_item.xml . Este archivo define el diseño de un elemento en ListView
. Cada elemento de vista de lista representa una aplicación instalada en el dispositivo del usuario. Muestra el icono, la etiqueta y el nombre del paquete de la aplicación. Mostramos el ícono de la aplicación usando una instancia de ImageView
e instancias de TextView
para la etiqueta y el nombre del paquete.
<RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android"
android: layout_width = “match_parent”
android: layout_height = “match_parent”
android: padding = “10dp”
>
<ImageView
android: id = “@ + id / item_app_icon”
android: layout_width = “wrap_content”
android: layout_height = “wrap_content”
android: layout_alignParentLeft = “true”
android: layout_centerVertical = “true”
/>
<TextView
android: id = “@ + id / item_app_label”
android: layout_width = “wrap_content”
android: layout_height = “wrap_content”
android: layout_toRightOf = “@ + id / item_app_icon”
android: paddingLeft = “10dp”
/>
<TextView
android: id = “@ + id / item_app_name”
android: layout_width = “wrap_content”
android: layout_height = “wrap_content”
android: layout_below = “@ + id / item_app_label”
android: layout_toRightOf = “@ + id / item_app_icon”
android: paddingLeft = “10dp”
/>
5. Implementando las clases de actividad
HomeActivity
Con los diseños de la aplicación creados, es hora de crear las dos clases de Activity
. Al crear las dos clases, asegúrese de que el nombre de cada clase coincida con el que especificó en el archivo de manifiesto del proyecto anteriormente.
Crea una nueva clase llamada HomeActivity
y establece android.app.Activity
como su superclase.
paquete ah.hathi.simplelauncher;
importar android.app.Activity;
importar android.content.Intent;
importar android.os.Bundle;
importar android.view.View;
clase pública HomeActivity extiende la actividad {
@Anular
vacío protegido onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_home);
}
public void showApps (Ver v) {
Intención i = nueva intención (esto, AppsListActivity.class);
startActivity (i);
}
}
En el método onCreate
la clase, invocamos setContentView
, pasando el diseño que creamos anteriormente. Puede recordar que agregamos un botón al diseño de activity_home que activa un método llamado showApps
. Ahora necesitamos implementar ese método en la clase HomeActivity
. La implementación es bastante simple, creamos un Intent
para la clase AppsListActivity
y lo AppsListActivity
.
AppsListActivity
Cree otra clase de Activity
llamada AppsListActivity
y establezca android.app.Activity
como su superclase. En el método onCreate
la clase, invocamos setContentView
, pasando el diseño de activity_apps_list que creamos anteriormente.
paquete ah.hathi.simplelauncher;
importar android.app.Activity;
importar android.content.Intent;
importar android.os.Bundle;
importar android.view.View;
AppsListActivity de clase pública extiende la actividad {
@Anular
vacío protegido onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_apps_list);
}
}
Aunque nuestro lanzador aún no haya terminado, puede guardar y ejecutar su aplicación en este momento. Cuando presiona el botón de inicio del dispositivo, debería ver una ventana emergente que le pregunta qué lanzador le gustaría usar.
Si elige Inicio de inicio simple , debería ver su nueva pantalla de inicio con un solo botón en la esquina superior derecha de la pantalla. También debería ver el fondo de pantalla actual de su dispositivo.
Regrese a Eclipse y cree una clase llamada AppDetail
que contendrá los detalles de una aplicación, el nombre del paquete, la etiqueta y el ícono de la aplicación. La interfaz es bastante básica como puedes ver a continuación.
paquete ah.hathi.simplelauncher;
importar android.graphics.drawable.Drawable;
AppDetail de clase pública {
Etiqueta CharSequence;
Nombre de secuencia de caracteres;
Icono dibujable;
}
6. Obteniendo aplicaciones
En el método loadApps
de la clase AppsListActivity
, utilizamos el método queryIntentActivities
de la clase PackageManager
para obtener todos los Intents que tienen una categoría de Intent.CATEGORY_LAUNCHER
. La consulta devuelve una lista de las aplicaciones que puede iniciar un iniciador. Recorremos los resultados de la consulta y agregamos cada elemento a una lista llamada apps
. Eche un vistazo al siguiente fragmento de código para obtener una aclaración.
administrador privado de PackageManager;
Lista privada aplicaciones;
privado vacío loadApps () {
manager = getPackageManager ();
aplicaciones = nueva ArrayList ();
Intención i = nueva intención (Intent.ACTION_MAIN, nulo);
i.addCategory (Intent.CATEGORY_LAUNCHER);
Lista availableActivities = manager.queryIntentActivities (i, 0);
para (ResolveInfo ri: availableActivities) {
Aplicación AppDetail = nueva AppDetail ();
app.label = ri.loadLabel (gerente);
app.name = ri.activityInfo.packageName;
app.icon = ri.activityInfo.loadIcon (administrador);
apps.add (aplicación);
}
}
7. Visualización de la lista de aplicaciones
Con la variable de apps
que contiene todos los detalles que necesitamos, podemos mostrar la lista de aplicaciones usando la clase ListView
. Creamos un ArrayAdapter
simple y ArrayAdapter
su método getView
para representar los elementos de la lista. Luego asociamos el ListView
con el adaptador.
lista privada de ListView;
private void loadListView () {
list = (ListView) findViewById (R.id.apps_list);
Adaptador ArrayAdapter = nuevo ArrayAdapter (esto,
R.layout.list_item,
aplicaciones) {
@Anular
public View getView (int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getLayoutInflater (). inflate (R.layout.list_item, null);
}
ImageView appIcon = (ImageView) convertView.findViewById (R.id.item_app_icon);
appIcon.setImageDrawable (apps.get (position) .icon);
TextView appLabel = (TextView) convertView.findViewById (R.id.item_app_label);
appLabel.setText (apps.get (posición) .label);
TextView appName = (TextView) convertView.findViewById (R.id.item_app_name);
appName.setText (apps.get (position) .name);
devuelve convertView;
}
};
list.setAdapter (adaptador);
}
8. Escuchando clics
Cuando el usuario hace clic en un elemento en ListView
, nuestro lanzador debe iniciar la aplicación correspondiente. Usamos el método getLaunchIntentForPackage
de la clase PackageManager
para crear una Intent
con la que iniciamos la aplicación. Eche un vistazo al siguiente fragmento de código.
privado vacío addClickListener () {
list.setOnItemClickListener (nuevo AdapterView.OnItemClickListener () {
@Anular
public void onItemClick (AdapterView av, View v, int pos,
ID largo) {
Intención i = manager.getLaunchIntentForPackage (apps.get (pos) .name.toString ());
AppsListActivity.this.startActivity (i);
}
});
}
9. Poniendo todo junto
Para que todo funcione en conjunto, necesitamos invocar loadApps
, loadListView
y addClickListener
en el método onCreate
de la clase AppsListActivity
como se muestra a continuación.
vacío protegido onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_apps_list);
loadApps ();
loadListView ();
addClickListener ();
}
Compila y ejecuta tu aplicación una vez más para ver el resultado. Ahora debería poder ver las aplicaciones que se pueden iniciar al hacer clic en el botón en la pantalla de inicio de nuestro iniciador. Haga clic en un elemento para iniciar la aplicación correspondiente.