Le développement d'applications Android pour les nuls tout-en-un

"Mon application a besoin d'un récepteur de radiodiffusion. Quelqu'un peut-il me rappeler comment je peux coder un récepteur de radiodiffusion? Et pendant que vous y êtes, comment une activité un résultat? Oh, zut. Où puis-je trouver tout ça rapidement?"

Sommaire

Avoir des exemples des types de code utilisés dans le développement d'applications Android prêt-à-main peut être d'une grande aide. Vous trouverez de nombreux exemples ici.

Activités

Voici une activité qui commence une autre activité:

CheatSheetActivity public class étend Activityimplements onclickListener {Bouton final String MY_ACTION button1-statique = "com.allmycode.action" -static finale Chaîne MY_URI = "my_scheme: my_scheme_specific_part" - @ Overridepublic vide onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) - setContentView (R.layout.main) -button1 = (Button) findViewById (R.id.button1) -button1.setonclickListener (cette) -} public void onclick (Voir arg0) {intention d'Intention = new Intent () - intent.setAction (MY_ACTION) -intent.setData (Uri.parse (MY_URI)) - startActivity (intention) -}}

Et ne pas oublier - lorsque vous créez une nouvelle classe d'activité, vous devez ajouter un correspondant élément à votre AndroidManifest.xml fichier. La OtherActivity Filtre intention élément ressemble à ceci:

Pour obtenir un résultat d'une activité, ajoutez le code suivant (ou quelque chose qui y ressemble) à votre application:

final int CODE_NUMBER = 42-finale CLASSNAME String = "CheatSheetActivity" -Santé vide onclick (Voir arg0) {intention Intention = new Intent()-intent.setAction(MY_ACTION)-intent.setData(Uri.parse(MY_URI))-startActivityForResult(intent, CODE_NUMBER) -} protégée onActivityResult (int numéro de code, int resultCode, l'intention Intention) {if (resultCode == RESULT_OK) {if (numéro de code == CODE_NUMBER) {Log.i (CLASSNAME, intent.getData () getSchemeSpecificPart ()). -}}}

Et dans l'activité qui crée le résultat, ajoutez le code du genre suivant:

Intention Intention = new Intent () - intent.setData (Uri.parse ("résultat: bonjour")) - setResult (RESULT_OK, intention) -Finish () -

Services

Un service fait habituellement son travail sans se soucier (ou même avertir) l'utilisateur. Par exemple, un service de cours des actions pourrait atteindre le web et obtenir les derniers prix de choix préférés de l'utilisateur. L'activité d'une autre application peut obtenir des données de service et afficher les données sur l'écran de l'appareil.

Le code suivant est un service complet (mais pas très précis) météo:

MyWeatherService public class étend service {Messenger messengerToClient = null-MyIncomingHandler myIncomingHandler = new MyIncomingHandler () - Messenger messengerToService = new Messenger (myIncomingHandler) - @ Overridepublic IBinder onBind (d'intention Intention) {return messengerToService.getBinder () -} MyIncomingHandler de classe étend Handler { handleMessage videOverridepublic (Message incomingMessage) {de réponse messengerToClient = incomingMessage.replyTo-Bundle = new Bundle () - reply.putString ("Temps", "Il fait sombre la nuit.") - un message replyMessage = Message.obtain () - replyMessage .setData (réponse), essayez d'{messengerToClient.send (replyMessage) -} catch (RemoteException e) {e.printStackTrace () -}}}}

Dans un autre paquet, vous mettez le code pour appeler le service météo. Voici quelques exemples de code:

ServiceConsumerActivity public class étend Activityimplements onclickListener {Messenger messengerToService = null-MyIncomingHandler myIncomingHandler = new MyIncomingHandler () - Messenger messengerFromService = new Messenger (myIncomingHandler) de connexion -ServiceConnection = new MyServiceConnection () - SharedPreferences prefs-booléennes isBound = false-vide bind () { intention Intention = new Intent () - intent.setAction ("com.allmycode.WEATHER") - isBound = bindService (intention, connexion, Context.BIND_AUTO_CREATE) -} public void QueryService () {if (isBound) {paquet bundle = new Bundle () - bundle.putString ("location", "Philadelphia") - Message message = Message.obtain () - message.replyTo = messengerFromService-message.setData (bundle), essayez d'{messengerToService.send (message) -} catch (RemoteException e) {e.printStackTrace () -}} else {textView1.setText (R.string.service_not_bound) -}} MyIncomingHandler de classe étend Handler {handleMessage videOverridepublic (Message msg) {paquet bundle = msg.getData () -textView1.setText (bundle.getString ("Temps")) -}} vide unbind () {if (isBound) {unbindService (connexion) -isBound = false -}} classe implémente MyServiceConnection ServiceConnection {public void onServiceConnected (ComponentName className, IBinder liant) {messengerToService = new Messenger (liant) -} public void onServiceDisconnected (ComponentName n) {messengerToService = null -}} // Je ne comprends pas la méthode onCreate ou la méthode // onclick dans cet exemple}.

Bien sûr, aucune application survit sans quelques éléments dans le fichier manifeste. Pour vous inscrire au service de cette section, vous avez besoin d'un élément de la nature suivante:

Récepteurs de diffusion

Lorsque vous faites une diffusion, vous jeter sur une intention dans la nature. Récepteurs diffusés avec filtres intention compatibles réveillent et font quelque chose d'utile avec les informations de diffusion. (Après avoir fait quelque chose avec l'info de diffusion, le récepteur se rendort. Dans ma prochaine incarnation, je veux être un récepteur de radiodiffusion.)

Pour créer votre propre récepteur de diffusion, vous étendez d'Android BroadcastReceiver classe et vous déclarez un OnReceive Procédé. Par exemple, le code suivant répond aux émissions correspondant:

MyReceiver public class étend BroadcastReceiver {OnReceive (de Context context, de l'intention Intention) videOverridepublic {// Faire des trucs importants}}

Une autre application crée une émission avec le code de la sorte suivante:




Intention Intention = new Intent () - intent.setAction ("com.allmycode.ACTION") - sendBroadcast (intention) -

Vous pouvez enregistrer un récepteur de diffusion dans votre AndroidManifest.xml fichier:

Pour plus de flexibilité, vous pouvez enregistrer un récepteur dans votre code Java. Le code Java suivant fait essentiellement ce que le un élément en AndroidManifest.xml fichier ne:

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

Les fournisseurs de contenu

Le fournisseur de contenu d'un app rend les données disponibles pour les autres applications qui fonctionnent sur le même appareil. L'interface du fournisseur ressemble à l'interface de la base de données, avec des tables, des lignes, des curseurs, et toutes ces bonnes choses. Par exemple, le code pour interroger un fournisseur de contenu ressemble à ceci:

requête du curseur publique (Uri Uri, String [] colonnes, String whereClause, String [] whereArgs, String sortOrder) {Cursor cursor = code nul-int = uriMatcher.match (uri) -Si (Code == 1) {cursor = db .query (simpletable, colonnes, whereClause, whereArgs, null, null, sortOrder) -} else if (Code == 2) {String [] = {columnNames "_id", "name", "quantité"} -string [] rowValues ​​= {"Table", "4", "2"} -MatrixCursor matrixCursor = new MatrixCursor (columnNames) -matrixCursor.addRow (rowValues) -cursor = matrixCursor-} return cursor-}

Fragments

UN fragment est comme une vue - une chose visible que vous pouvez afficher à l'intérieur d'une activité. Mais contrairement à une vue, un fragment a ses propres méthodes de cycle de vie. Donc Android peut créer une petite pile de fragments à l'intérieur d'une activité. Lorsque l'utilisateur appuie sur le bouton Retour, Android apparaît un fragment hors de la pile. (Si il n'y a pas de fragments de la pop, Android affiche toute l'activité hors la tâche pile.)

Vous pouvez mettre un fragment dans la mise en page de trame suivante:

Pour mettre un fragment dans la mise en page, vous effectuez une transaction de fragment. Voici ce que une transaction fragment ressemble:

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

Intentions et Filtres Intent

Lorsque l'intention répond le filtre intention droite, le résultat est un match dans le ciel. Mais les règles d'appariement intentions avec des filtres sont compliquées. Les règles se lisent comme les clauses juridiques dans un contrat prénuptial.

Vous pouvez utiliser les méthodes Java pour décrire une intention. Voici quelques méthodes souvent utilisées:

  • setAction: Définit l'action de l'intention. (L'intention peut avoir qu'une seule action.)

  • AddCategory: Ajoute une catégorie à l'intention. (L'intention peut avoir de nombreuses catégories.)

  • setdata: Définit l'URI de l'intention, et supprime le type MIME de l'intention (si l'intention est de type MIME).

  • setType: Définit le type MIME de l'intention et supprime l'URI de l'intention (si l'intention a une URI).

  • setDataAndType: Définit deux URI l'intention et le type MIME de l'intention. Selon les docs, "Cette méthode doit être utilisée très rarement."

Vous pouvez également utiliser le code XML pour décrire une intention.

Dans l'URI http://allmycode.com:80/android, le régime est http, l'hôte est allmycode.com, le port est 80, et le chemin est androïde. L'autorité (qui ne soit pas un des attributs dans un élément, mais il est utile de connaître) est allmycode.com:80.

Vous définissez généralement les valeurs d'un filtre dans le but AndroidManifest.xml fichier. Mais dans le code Java, le android.content.IntentFilter classe a beaucoup de méthodes utiles. Voici quelques-uns d'entre eux:

  • addAction: Ajoute une action sur le filtre.

  • AddCategory: Ajoute une catégorie pour le filtre.

  • addDataScheme: Ajoute un plan pour le filtre.

  • addDataAuthority: Ajoute une autorité pour le filtre.

  • addDataPath: Ajoute un chemin d'accès au filtre.

  • addDataType: Ajoute un type MIME pour le filtre.

Un filtre intention peut avoir de nombreuses actions, de nombreuses catégories, et ainsi de suite.

Voici une brève liste d'exigences pour un match entre une intention et un filtre intention. Cette liste est incomplète si, si vous voulez une liste complète, vous mieux d'acheter Développement d'applications Android All-in-One For Dummies par Barry Burd.

  • Si l'intention a une action, afin de correspondre à l'intention, un filtre intention doit avoir une action identique. Le filtre intention peut avoir des actions supplémentaires. Chacune de ces actions supplémentaires ont aucun effet sur le match.

  • Si l'intention a catégories, afin de correspondre à l'intention, un filtre intention doit avoir ces (et peut-être plus) catégories.

  • Si l'intention est de type MIME, afin de correspondre à l'intention, un filtre intention doit avoir un type MIME correspondant. Le filtre peut avoir l'intention des types MIME supplémentaires. Tous ces types MIME supplémentaires ont aucun effet sur le match.

  • Si un filtre a l'intention types MIME, afin de faire correspondre le filtre intention, l'intention doit avoir un type MIME et le type MIME de l'intention doit correspondre à un des types MIME du filtre.

  • Dans une certaine mesure, la mise en correspondance des types MIME peut impliquer des caractères génériques et les expressions régulières.

  • Si l'intention a un schéma d'URI, afin de correspondre à l'intention, un filtre intention doit avoir un schéma d'URI correspondant.

  • Si un filtre a l'intention schémas d'URI, afin de faire correspondre le filtre intention, l'intention doit avoir un schéma d'URI et le schéma d'URI de l'intention doit correspondre à l'un des schémas d'URI du filtre.

Pour terminer cette liste, copiez les deux dernières règles, changer un mot ou deux dans chacune des copies:

  • Si l'intention a une URI hôte, afin de correspondre à l'intention, un filtre intention doit avoir un URI correspondant hôte.

  • Si un filtre a l'intention URI hôtes, afin de faire correspondre le filtre intention, l'intention doit avoir une URI hôte et l'URI de l'intention hôte doit correspondre à l'un des URI du filtre hôtes.

  • Si l'intention a une URI port, afin de correspondre à l'intention, un filtre intention doit avoir un URI correspondant port.

  • Si un filtre a l'intention URI ports, afin de faire correspondre le filtre intention, l'intention doit avoir une URI port et l'URI de l'intention port doit correspondre à l'un des URI du filtre ports.

  • Si l'intention a une URI chemin, afin de correspondre à l'intention, un filtre intention doit avoir un URI correspondant chemin.

  • Si un filtre a l'intention URI chemins, afin de faire correspondre le filtre intention, l'intention doit avoir une URI chemin et l'URI de l'intention chemin doit correspondre à l'un des URI du filtre chemins.


» » » » Le développement d'applications Android pour les nuls tout-en-un