prucommercialre.com


Comúnmente utilizados Código en Desarrollo de Aplicaciones para Android

"Mi aplicación necesita un receptor de radiodifusión. ¿Puede alguien recordar cómo puedo codificar un receptor de radiodifusión? Y mientras estás en ello, ¿cómo una actividad devuelve un resultado? Oh, diablos. ¿Dónde puedo encontrar todas esas cosas rápidamente?"

Tener ejemplos de los tipos de código utilizado en el desarrollo de aplicaciones Android listo para la mano puede ser de gran ayuda. Usted encontrará un montón de ejemplos aquí.

Actividades

He aquí una actividad que comienza otra actividad:

public class CheatSheetActivity extiende Actividad
implementa OnClickListener {
Botón1 Button;
estática MY_ACTION final String = "com.allmycode.action";
static final Cadena MY_URI
= "My_scheme: my_scheme_specific_part";

@ Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.main);
botón1 = (Button) findViewById (R.id.button1);
button1.setOnClickListener (this);
}

public void onClick (Ver arg0) {
Intención Intención = new Intent ();
intent.setAction (MY_ACTION);
intent.setData (Uri.parse (MY_URI));
startActivity (intención);
}
}

Y no se olvide - cuando se crea una nueva clase de actividad, debe agregar un <actividad> elemento correspondiente a su archivo AndroidManifest.xml. Filtro intención del elemento OtherActivity ve algo como esto:

<Intención de filtro>
<Acción android: name = "com.allmycode.action" />
<Categoría
android: name = "android.intent.category.DEFAULT" />
<Androide datos: scheme = "my_scheme" />
</ Intención de filtro>

Para obtener un resultado de una actividad, agregue el código siguiente (o algo que se le parezca) a su aplicación:

final int numero_de_código = 42;
CLASSNAME final String = "CheatSheetActivity";

public void onClick (Ver arg0) {
Intención Intención = new Intent ();
intent.setAction (MY_ACTION);
intent.setData (Uri.parse (MY_URI));

startActivityForResult (intención, numero_de_código);
}

protected void onActivityResult
(Int Codenumber, int resultCode, la intención Intención) {
si (resultCode == RESULT_OK) {
si (Codenumber == numero_de_código) {
Log.i (CLASSNAME,
. intent.getData () getSchemeSpecificPart ());
}
}
}

Y en la actividad que genera el resultado, agregue código del siguiente tipo:

Intención Intención = new Intent ();
intent.setData (Uri.parse ("resultado: hola"));
setResult (RESULT_OK, intención);
acabado ();

Servicios

Un servicio normalmente hace su trabajo sin molestar (o siquiera notificar a) del usuario. Por ejemplo, un servicio de precio de las acciones podría llegar a la web y obtener las últimas cotizaciones de selecciones favoritas del usuario. La actividad de otra aplicación puede obtener datos del servicio y mostrar los datos en la pantalla del dispositivo.

El código siguiente es un servicio completo (pero no muy precisa) tiempo:

public class MyWeatherService extiende Servicio {

Mensajero messengerToClient = null;

MyIncomingHandler myIncomingHandler =
nueva MyIncomingHandler ();
Mensajero messengerToService =
nuevo Messenger (myIncomingHandler);

@ Override
pública IBinder onBind (intención Intención) {
volver messengerToService.getBinder ();
}

clase MyIncomingHandler extiende Handler {
@ Override
public void handleMessage (Mensaje incomingMessage) {
messengerToClient = incomingMessage.replyTo;

Bundle respuesta = new Bundle ();
reply.putString ("Tiempo", "Es oscuro por la noche.");
Mensaje replyMessage = Message.obtain ();
replyMessage.setData (respuesta);
try {
messengerToClient.send (replyMessage);
} Catch (RemoteException e) {
e.printStackTrace ();
}
}
}
}

En otro paquete, se pone el código para llamar el servicio meteorológico. He aquí algunos ejemplos de código:

public class ServiceConsumerActivity extiende Actividad
implementa OnClickListener {

Mensajero messengerToService = null;

MyIncomingHandler myIncomingHandler =
nueva MyIncomingHandler ();
Mensajero messengerFromService =
nuevo Messenger (myIncomingHandler);

Conexión ServiceConnection =
nueva MyServiceConnection ();
SharedPreferences de preferencias;
boolean isBound = false;

vacío bind () {
Intención Intención = new Intent ();
intent.setAction ("com.allmycode.WEATHER");
isBound =
bindService (intención, conexión,
Context.BIND_AUTO_CREATE);
}

pública QueryService void () {
si (isBound) {
Haz Bundle = new Bundle ();
bundle.putString ("location", "Philadelphia");

Mensaje Mensaje = Message.obtain ();
message.replyTo = messengerFromService;
message.setData (paquete);
try {
messengerToService.send (mensaje);
} Catch (RemoteException e) {
e.printStackTrace ();
}
} Else {
textView1.setText (R.string.service_not_bound);
}
}

clase MyIncomingHandler extiende Handler {
@ Override
public void handleMessage (msg Mensaje) {
Haz Bundle = msg.getData ();
textView1.setText (bundle.getString ("Tiempo"));
}
}

vacío unbind () {
si (isBound) {
unbindService (conexión);
isBound = false;
}
}

clase MyServiceConnection implementa ServiceConnection {
public void onServiceConnected (
ComponentName className, fijador IBinder) {
messengerToService = nuevo Messenger (carpeta);
}

public void onServiceDisconnected (ComponentName n) {
messengerToService = null;
}
}

// No incluyo el método onCreate o la
// Método onClick en este ejemplo.
}

Por supuesto, ninguna aplicación sobrevive sin algunos elementos en el archivo de manifiesto. Para registrar un servicio de esta sección, es necesario un elemento del siguiente tipo:

<Androide servicio: name = ". MyWeatherService">
<Intención de filtro>
<Acción android: name = "com.allmycode.WEATHER" />
</ Intención de filtro>
</ Service>

Receptores de radiodifusión

Al hacer una emisión, que arrojan una intención cabo en el medio natural. Los receptores de radiodifusión con filtros intención compatibles despiertan y hacen algo útil con la información de difusión. (Después de hacer algo con la información de difusión, el receptor se vuelve a dormir. En mi próxima reencarnación, yo quiero ser un receptor de radiodifusión.)

Para crear su propio receptor de radiodifusión, se amplía la clase BroadcastReceiver de Android y se declara un método OnReceive. Por ejemplo, el siguiente código responde a las emisiones a juego:

public class MyReceiver extiende BroadcastReceiver {

@ Override
public void OnReceive (contexto Contexto, intención Intención) {
// Hacer cosas importantes
}
}

Otra aplicación crea una emisión con el código del siguiente tipo:

Intención Intención = new Intent ();
intent.setAction ("com.allmycode.ACTION");
sendBroadcast (intención);

Puede registrar un receptor de radiodifusión en el archivo AndroidManifest.xml:

<Receptor android: name = "MyReceiver.">
<Intención de filtro>
<Acción android: name = "com.allmycode.ACTION" />
</ Intención de filtro>
</ Receptor>

Para mayor flexibilidad, se puede registrar un receptor en su código Java. El siguiente código de Java hace esencialmente lo que el elemento <receiver> en un archivo AndroidManifest.xml hace:

IntentFilter filtro = new IntentFilter ();
filter.addAction ("com.allmycode.ACTION");
registerReceiver (nuevo MyReceiver (), filtro);

Los proveedores de contenido

Proveedor de contenido de una aplicación hace que los datos disponibles para otras aplicaciones que se ejecutan en el mismo dispositivo. La interfaz del proveedor se asemeja a la interfaz de una base de datos, con tablas, filas, cursores, y todas esas cosas buenas. Por ejemplo, el código para consultar un proveedor de contenido se ve así:

consulta pública Cursor (Uri uri, String [] columnas,
Cadena whereClause, String [] whereArgs,
Cadena sortOrder) {
Cursor cursor = null;
código int = uriMatcher.match (uri);
si (Código == 1) {

cursor =
db.query (SimpleTable, columnas, whereClause,
whereArgs, null, null, SortOrder);

} Else if (Código == 2) {
String [] columnNames = {"_id", "nombre", "cantidad"};
String [] rowValues ​​= {"Tabla", "4", "2"};
MatrixCursor matrixCursor =
nueva MatrixCursor (columnNames);
matrixCursor.addRow (rowValues);
cursor = matrixCursor;
}
volver cursor;
}

Fragmentos

Un fragmento es como una vista - una cosa visible que se puede visualizar en el interior de una actividad. Pero a diferencia de un punto de vista, un fragmento tiene sus propios métodos de ciclo de vida. Así que Android puede crear una pequeña pila de fragmentos dentro de una actividad. Cuando el usuario pulsa el botón Atrás, Android aparece un fragmento fuera de la pila. (Si no hay fragmentos de pop, Android aparece toda la actividad de la pila de tareas.)

Usted puede poner un fragmento en el siguiente diseño de marcos:

<FrameLayout android: id = "@ + id / docs"
android: layout_height = "match_parent"
android: layout_width = "0px"
android: layout_weight = "1"
android: fondo =
"Android:? Attr / detailsElementBackground" />

Para poner un fragmento en el diseño, se realiza una transacción fragmento. Esto es lo que una transacción fragmento se ve así:

DocsFragment docsFragment = DocsFragment.newInstance (índice);
FragmentManager fragmentManager = getFragmentManager ();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction ();
fragmentTransaction.replace (R.id.docs, docsFragment);
fragmentTransaction.addToBackStack (null);
fragmentTransaction.commit ();

Intenciones y la intención Filtros

Cuando la intención se encuentra con el filtro de la intención correcta, el resultado es un partido en el cielo. Pero las reglas de juego las intenciones con filtros son complicadas. Las reglas se leen como las cláusulas legales de un acuerdo prenupcial.

Puede utilizar los métodos de Java para describir una intención. Aquí están algunos métodos de uso frecuente:

  • setAction: Establece una acción de la intención. (Un intento sólo puede tener una acción).
  • AddCategory: añade una categoría a la intención. (Un intento puede tener muchas categorías.)
  • setData: Define el URI de la intención, y elimina el tipo MIME de la intención (si la intención tiene un tipo MIME).
  • setType: Establece el tipo MIME de la intención y elimina URI de la intención (si la intención tiene un URI).
  • setDataAndType: Establece tanto URI de la intención y el tipo MIME de la intención. De acuerdo con la documentación, "Este método debe ser utilizado muy pocas veces."

También puede utilizar el código XML para describir una intención.

<Acción android: name = "string" />

<Categoría android: name = "string" />

<Androide datos: scheme = "cadena"
android: host = "cadena"
android: port = "cadena"
android: path = "cadena"
android: pathPattern = "cadena"
android: Pathprefix = "cadena"
android: mimeType = "string" />

En el http://www.allmycode.com:80/android URI, el esquema es http, el anfitrión es www.allmycode.com, el puerto es 80, y el camino es android. La autoridad (que no es uno de los atributos de un elemento <data>, pero es útil saber sobre) es www.allmycode.com:80.

Por lo general, establecer los valores de un filtro de intención en el archivo AndroidManifest.xml. Pero en el código de Java, la clase android.content.IntentFilter tiene un montón de métodos útiles. Éstos son algunos de ellos:

  • addAction: añade una acción al filtro.
  • AddCategory: añade una categoría para el filtro.
  • addDataScheme: Añade un esquema para el filtro.
  • addDataAuthority: Añade una autoridad para el filtro.
  • addDataPath: Añade una ruta de acceso al filtro.
  • addDataType: Añade un tipo MIME para el filtro.

Un filtro de intención puede tener muchas acciones, muchas categorías, y así sucesivamente.

He aquí una breve lista de los requisitos para que un partido entre un intento y un filtro de intención. Esta lista no es completa por lo que, si desea una lista completa, es mejor comprar Desarrollo de aplicaciones Android Todo-en-uno para los maniquíes de Barry Burd.

  • Si la intención tiene una acción, con el fin de que coincida con la intención, un filtro de intención debe tener una acción idéntica. El filtro puede tener la intención acciones adicionales. Cualquiera de estas acciones adicionales no tienen ningún efecto sobre el partido.
  • Si la intención tiene categorías, con el fin de que coincida con la intención, un filtro de intención debe tener estos (y posiblemente más) categorías.
  • Si la intención tiene un tipo MIME, con el fin de que coincida con la intención, un filtro de intención debe tener un tipo MIME a juego. El filtro de intención puede tener tipos MIME adicionales. Cualquiera de estos tipos MIME adicionales no tienen ningún efecto sobre el partido.
  • Si un filtro tiene intención tipos MIME, con el fin de que coincida con el filtro de la intención, la intención debe tener un tipo MIME y el tipo MIME de la intención debe coincidir con uno de los tipos MIME del filtro.
  • Hasta cierto punto, la equiparación de los tipos MIME puede incluir comodines y expresiones regulares.
  • Si la intención tiene un esquema de URI, con el fin de que coincida con la intención, un filtro de intención debe tener un esquema de URI a juego.
  • Si un filtro tiene intención esquemas URI, con el fin de que coincida con el filtro de la intención, la intención debe tener un esquema de URI y el esquema de URI de la intención debe coincidir con uno de los esquemas de URI del filtro.

Para terminar esta lista, copiar las dos últimas reglas, el cambio de una palabra o dos en cada una de las copias:

  • Si la intención tiene una gran cantidad URI, con el fin de que coincida con la intención, un filtro de intención debe tener un anfitrión URI a juego.
  • Si un filtro tiene la intención hosts URI, con el fin de que coincida con el filtro de la intención, la intención debe tener un anfitrión URI y URI de host de la intención debe coincidir con uno de del filtro URI anfitrión s.
  • Si la intención tiene un puerto URI, con el fin de que coincida con la intención, un filtro de intención debe tener un puerto URI a juego.
  • Si un filtro tiene la intención puertos URI, con el fin de que coincida con el filtro de la intención, la intención debe tener un puerto URI URI y el puerto de la intención debe coincidir con uno de del filtro URI Por tí s.
  • Si la intención tiene un camino URI, con el fin de que coincida con la intención, un filtro de intención debe tener un camino URI a juego.
  • Si un filtro tiene la intención caminos URI, con el fin de que coincida con el filtro de la intención, la intención debe tener una ruta y la ruta URI URI de la intención debe coincidir con uno de los caminos de URI del filtro.