Desarrollo de aplicaciones Android para dummies todo-en-uno

"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 Activityimplements onclickListener {Button-Button1 estática MY_ACTION final String = "com.allmycode.action" -static última cadena MY_URI = "my_scheme: my_scheme_specific_part" - @ Overridepublic void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) - setContentView (R.layout.main) -button1 = (Button) findViewById (R.id.button1) -button1.setonclickListener (este) -} 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 el correspondiente elemento a su AndroidManifest.xml archivo. los OtherActivity filtro de la intención del elemento se ve algo como esto:

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

última int numero_de_código = 42 de final CLASSNAME String = "CheatSheetActivity" -públicos void onclick (Ver arg0) {intención Intención = new Intent()-intent.setAction(MY_ACTION)-intent.setData(Uri.parse(MY_URI))-startActivityForResult(intent, Numero_de_código) -} protected void onActivityResult (int Codenumber, int resultCode, la intención Intención) {if (resultCode == RESULT_OK) {if (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: hello")) - setResult (RESULT_OK, intención) -finish () -

Servicios

Un servicio normalmente hace su trabajo sin molestar (o incluso 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. Actividad de Otra aplicación podría obtener los 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 = new MyIncomingHandler () - Mensajero messengerToService = nuevo Messenger (myIncomingHandler) - @ Overridepublic IBinder onBind (intención Intención) {return messengerToService.getBinder () -} class MyIncomingHandler extiende Manejador { Overridepublic vacío handleMessage (Mensaje incomingMessage) {respuesta messengerToClient = incomingMessage.replyTo-Bundle = new Bundle () - reply.putString ("tiempo", "Es oscuro por la noche.") - Mensaje replyMessage = Message.obtain () - replyMessage .setData (respuesta) -probar {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 Activityimplements onclickListener {Mensajero messengerToService = null-MyIncomingHandler myIncomingHandler = new MyIncomingHandler () - Mensajero messengerFromService = nuevo Messenger (myIncomingHandler) Conexión -ServiceConnection = new MyServiceConnection () - SharedPreferences Preferencias-booleanos isBound = falso vacío bind () { intención Intención = new Intent () - intent.setAction ("com.allmycode.WEATHER") - isBound = bindService (intención, conexión, Context.BIND_AUTO_CREATE) -} public QueryService void () {if (isBound) {paquete paquete = new Bundle () - bundle.putString ("location", "Filadelfia") - mensaje Mensaje = Message.obtain () - message.replyTo = messengerFromService-message.setData (bundle) -probar {messengerToService.send (mensaje) -} catch (RemoteException e) {e.printStackTrace () -}} else {textView1.setText (R.string.service_not_bound) -}} class MyIncomingHandler extiende Manejador {Overridepublic vacío handleMessage (msg Mensaje) {paquete paquete = msg.getData () -textView1.setText (bundle.getString ("Tiempo")) -}} void unbind () {if (isBound) {unbindService (conexión) -isBound = false -}} class MyServiceConnection implementa ServiceConnection {public void onServiceConnected (ComponentName className, IBinder aglomerante) {messengerToService = nuevo Messenger (carpeta) -} public void onServiceDisconnected (ComponentName n) {messengerToService = null -}} // No incluyo el método onCreate o el 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:

Receptores de radiodifusión

Al hacer una emisión, que arrojan una intención a cabo en el medio natural. 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 encarnación, yo quiero ser un receptor de radiodifusión.)

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

public class MyReceiver extiende BroadcastReceiver {OnReceive (contexto Contexto, la intención Intención) vacíoOverridepublic {// 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 su AndroidManifest.xml archivo:

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

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

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 asemeja interfaz de una base de datos, con las tablas, filas, cursores, y todas esas cosas buenas. Por ejemplo, el código para consultar un proveedor de contenido se ve así:

Cursor consulta pública (Uri Uri, String [] columnas, Cadena whereClause, String [] whereArgs, Cadena sortOrder) {cursor cursor = código nulo 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 = new MatrixCursor (columnNames) -matrixCursor.addRow (rowValues) -cursor = matrixCursor-} return Cursor-}

Fragmentos

LA fragmento es como una visión - una cosa visible que se puede visualizar el interior de una actividad. Pero a diferencia de una visión, 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:

Para poner un fragmento en la disposición, se realiza una transacción fragmento. Esto es lo que una transacción fragmento parece:

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 en 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 la 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: Establece 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 usado en muy raras ocasiones."

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

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

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

  • addAction: Añade una acción para el 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 intenciones 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 que compre Desarrollo de aplicaciones Android All-in-One For Dummies por 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 de intenciones puede tener 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 intenciones 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 normas, el cambio de una palabra o dos en cada una de las copias:

  • Si la intención tiene un URI anfitrión, con el fin de que coincida con la intención, un filtro de intención debe tener un URI búsqueda anfitrión.

  • Si un filtro tiene la intención URI Hospedadores, con el fin de que coincida con el filtro de la intención, la intención debe tener un URI anfitrión y URI de la intención anfitrión debe coincidir con uno de URI del filtro anfitrións.

  • Si la intención tiene un URI Puerto, con el fin de que coincida con la intención, un filtro de intención debe tener un URI búsqueda Puerto.

  • Si un filtro tiene la intención URI puertos, con el fin de que coincida con el filtro de la intención, la intención debe tener un URI Puerto y URI de la intención Puerto debe coincidir con uno de URI del filtro ports.

  • Si la intención tiene un URI camino, con el fin de que coincida con la intención, un filtro de intención debe tener un URI búsqueda camino.

  • Si un filtro tiene la intención URI caminos, con el fin de que coincida con el filtro de la intención, la intención debe tener un URI camino y URI de la intención camino debe coincidir con uno de URI del filtro caminos.




» » » » Desarrollo de aplicaciones Android para dummies todo-en-uno