Table des matières:
- Activités
- Services
- Récepteurs de diffusion
- Le fournisseur de contenu d'une application met les données à la disposition d'autres applications exécutées sur le même appareil. L'interface du fournisseur ressemble à l'interface d'une base de données, avec des tables, des lignes, des curseurs et tout ce qu'il y a de mieux. Par exemple, le code pour interroger un fournisseur de contenu ressemble à ceci:
- Un fragment
- Vous pouvez utiliser des méthodes Java pour décrire une intention. Voici quelques méthodes souvent utilisées:
Vidéo: Fun with ArrayMaps (Android Performance Patterns Season 3 ep1) 2025
" Mon application nécessite un récepteur de diffusion. Quelqu'un peut-il me rappeler comment je peux coder un récepteur de radiodiffusion? Et pendant que vous y êtes, comment une activité retourne-t-elle un résultat? Oh, diable. Où puis-je trouver tout ça rapidement? "
Avoir des exemples de types de code utilisés dans le développement d'applications Android à portée de main peut être d'une grande aide. Vous trouverez beaucoup d'exemples ici.
Activités
Voici une activité qui commence une autre activité:
public class CheatSheetActivity extends Implémentation d'implements OnClickListener {Button button1; static final String MY_ACTION = "com.allmycode.action"; static final String MY_URI = "mon_schéma: mon_scheme_specific_part"; @Override public void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R disposition.principale); button1 = (Bouton) findViewById (R, id, bouton1); button1. setOnClickListener (this);} public void onClick (Voir arg0) {Intention intention = new Intent (); intention. setAction (MY_ACTION); intention. setData (Uri, parse (MY_URI)); startActivity (intention);}}
Et n'oubliez pas: lorsque vous créez une nouvelle classe d'activité, vous devez ajouter un élément correspondant à votre AndroidManifest. fichier xml. Le filtre d'intention de l'élément OtherActivity ressemble à ceci:
Pour obtenir le résultat d'une activité, ajoutez le code suivant (ou quelque chose qui lui ressemble) à votre application:
final int CODE_NUMBER = 42; final String CLASSNAME = "CheatSheetActivity"; public void onClick (Voir arg0) {Intention intention = new Intent (); intention. setAction (MY_ACTION); intention. setData (Uri, parse (MY_URI)); startActivityForResult (intention, CODE_NUMBER);} void protégé onActivityResult (int codeNuméro, int resultCode, intention d'intention) {if (resultCode == RESULT_OK) {if (codeNumber == CODE_NUMBER) {Log. i (CLASSNAME, intention. getData (). getSchemeSpecificPart ());}}}
Et dans l'activité qui crée le résultat, ajoutez le code du type suivant:
Intention intention = new Intention (); intention. setData (Uri.parse ("résultat: bonjour")); setResult (RESULT_OK, intention); terminer();
Services
Un service effectue généralement son travail sans déranger (ni même informer) l'utilisateur. Par exemple, un service de cours boursier peut atteindre le Web et obtenir les derniers prix des choix favoris de l'utilisateur. L'activité d'une autre application peut obtenir des données du service et afficher les données sur l'écran de l'appareil.
Le code suivant est un service météo complet (mais pas très précis):
public class MyWeatherService extends Service {Messenger messengerToClient = null; MyIncomingHandler myIncomingHandler = new MyIncomingHandler (); Messenger messengerToService = nouveau Messenger (myIncomingHandler); @Override public IBinder onBind (intention intentionnelle) {return messengerToService.getBinder ();} classe MyIncomingHandler extends Gestionnaire {@Override public void handleMessage (message incomingMessage) {messengerToClient = incomingMessage. répondre à; Bundle réponse = new Bundle (); répondre. putString ("météo", "Il fait noir la nuit."); Message replyMessage = Message. obtenir(); message de réponse. setData (réponse); essayez {messengerToClient. send (replyMessage);} catch (RemoteException e) {e. printStackTrace ();}}}}
Dans un autre paquet, vous mettez le code pour appeler le service météo. Voici un exemple de code:
public class ServiceConsumerActivity extends Implémentation implémente OnClickListener {Messenger messengerToService = null; MyIncomingHandler myIncomingHandler = new MyIncomingHandler (); Messenger messengerFromService = nouveau Messenger (myIncomingHandler); Connexion ServiceConnection = new MyServiceConnection (); SharedPreferences prefs; boolean isBound = faux; void bind () {Intention intention = new Intent (); intention. setAction ("com.allmycode.Météo"); isBound = bindService (intention, connexion, contexte BIND_AUTO_CREATE);} void public queryService () {if (isBound) {Bundle bundle = nouvel ensemble (); paquet. putString ("emplacement", "Philadelphia"); Message message = Message. obtenir(); message. replyTo = messengerFromService; message. setData (bundle); essayez {messengerToService. send (message);} catch (RemoteException e) {e. printStackTrace ();}} else {textView1. setText (R chaîne.numéro_service);}} class MyIncomingHandler extends Handler {@Overide public void handleMessage (message msg) {Bundle bundle = msg. getData (); textView1. setText (bundle.getString ("météo"));}} void unbind () {if (isBound) {unbindService (connexion); isBound = false;}} classe MyServiceConnection implémente ServiceConnection {public void onServiceConnected (nomClassName className, classeur IBinder) {messengerToService = nouveau Messenger (classeur);} public void onServiceDisconnected (nom_composant n) {messengerToService = null;}} // I don ' t incluez la méthode onCreate ou la méthode // onClick dans cet exemple.}
Bien sûr, aucune application ne survit sans certains éléments dans le fichier manifeste. Pour enregistrer le service de cette section, vous avez besoin d'un élément du type suivant:
Récepteurs de diffusion
Lorsque vous diffusez une émission, vous lancez une intention dans la nature. Les récepteurs de diffusion avec des filtres d'intention compatibles se réveillent et font quelque chose d'utile avec les informations diffusées. (Après avoir fait quelque chose avec les informations de diffusion, le récepteur se rendormit Dans ma prochaine incarnation, je veux être un récepteur de diffusion.)
Pour créer votre propre récepteur de diffusion, vous étendez la classe BroadcastReceiver d'Android et vous déclarez un onReceive méthode. Par exemple, le code suivant répond aux diffusions correspondantes: Intention intention = new Intention (); intention. setAction ("com.allmycode.Action"); sendBroadcast (intention); Pour plus de flexibilité, vous pouvez enregistrer un récepteur dans votre code Java. Le code Java suivant fait essentiellement ce que l'élément dans un AndroidManifest. Le fichier xml fait: Filtre IntentFilter = new IntentFilter (); filtre. addAction ("com.allmycode.Action"); registerReceiver (nouveau MyReceiver (), filtre); public Cursor query (Uri uri, Chaînes [] colonnes, String whereClause, Chaîne [] whereArgs, Chaîne sortOrder) {Curseur cursor = null; code int = uriMatcher. match (uri); if (code == 1) {curseur = db. query (SIMPLETABLE, colonnes, whereClause, whereArgs, null, null, sortOrder);} else if (code == 2) {String [] columnNames = {"_id", "nom", "montant"}; String [] rowValues = {"Table", "4", "2"}; MatrixCursor matrixCursor = nouveau MatrixCursor (columnNames); matrixCursor. addRow (rowValues); cursor = matrixCursor;} return cursor;} est comme une vue - une chose visible que vous pouvez afficher dans une activité. Mais contrairement à une vue, un fragment a ses propres méthodes de cycle de vie. Ainsi, Android peut créer une petite pile de fragments à l'intérieur d'une activité. Lorsque l'utilisateur appuie sur le bouton Retour, Android supprime un fragment de la pile. (S'il n'y a aucun fragment à faire apparaître, Android supprime toute l'activité de la pile des tâches.) Vous pouvez placer un fragment dans la disposition de trame suivante: Pour mettre un fragment dans la mise en page,. Voici à quoi ressemble une transaction de fragment: DocsFragment docsFragment = DocsFragment. newInstance (index); FragmentManager fragmentManager = getFragmentManager (); FragmentTransaction fragmentTransaction = fragmentManager. beginTransaction (); fragmentTransaction. remplacer (D. id docs, docsFragment); fragmentTransaction. addToBackStack (null); fragmentTransaction. commettre(); Intentions et filtres d'intention setAction: Définit l'action de l'intention. (Une intention peut avoir une seule action.) addCategory: Ajoute une catégorie à l'intention. (Une intention peut avoir plusieurs catégories.) setData: Définit l'URI de l'intention et supprime le type MIME de l'intention (si l'intention a un type MIME). setType: Définit le type MIME de l'intention et supprime l'URI de l'intention (si l'intention a un URI). setDataAndType: Définit à la fois l'URI de l'intention et le type MIME de l'intention. Selon les docs, "cette méthode devrait très rarement être utilisée. " Vous pouvez également utiliser un code XML pour décrire une intention. Dans l'URI // www.allmycode. com: 80 / Android, le régime est http, l'hôte est www. allmycode. com, le port est de 80, et le chemin est Android. L'autorité (qui n'est pas l'un des attributs d'un élément, mais qui est utile à connaître) est www. allmycode. com: 80. Vous définissez généralement les valeurs d'un filtre d'intention dans AndroidManifest. fichier xml. Mais dans le code Java, l'android. contenu. La classe IntentFilter a beaucoup de méthodes utiles. Voici quelques-uns d'entre eux: addAction: Ajoute une action au filtre. addCategory: Ajoute une catégorie au filtre. addDataScheme: Ajoute un schéma au filtre. addDataAuthority: Ajoute une autorité au filtre. addDataPath: Ajoute un chemin au filtre. addDataType: Ajoute un type MIME au filtre. Un filtre d'intention peut comporter plusieurs actions, plusieurs catégories, etc. Voici une brève liste d'exigences pour une correspondance entre un filtre d'intention et un filtre d'intention. Cette liste n'est pas complète, donc, si vous voulez une liste complète, vous devriez acheter Développement d'applications Android All-in-One For Dummies par Barry Burd. Si une intention a une action, afin de correspondre à l'intention, un filtre d'intention doit avoir une action identique. Le filtre d'intention peut avoir des actions supplémentaires. Aucune de ces actions supplémentaires n'a aucun effet sur la correspondance. Si une intention a des catégories, afin de correspondre à l'intention, un filtre d'intention doit avoir ces catégories (et peut-être plus). Si une intention a un type MIME, afin de correspondre à l'intention, un filtre d'intention doit avoir un type MIME correspondant. Le filtre d'intention peut avoir des types MIME supplémentaires. Aucun de ces types MIME supplémentaires n'a aucun effet sur la correspondance. Si un filtre d'intention a des types MIME, afin de correspondre au filtre d'intention, une intention doit avoir un type MIME et le type MIME de l'intention doit correspondre à l'un des types MIME du filtre. Dans une certaine mesure, la correspondance des types MIME peut impliquer des caractères génériques et des expressions régulières. Si une intention a un schéma d'URI, afin de correspondre à l'intention, un filtre d'intention doit avoir un schéma d'URI correspondant. Si un filtre d'intention a des schémas d'URI, afin de correspondre au filtre d'intention, une 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, en changeant un ou deux mots dans chacune des copies: Si une intention a un URI host , pour correspondre à intention, un filtre d'intention doit avoir un URI hôte correspondant. Si un filtre d'intention a URI hosts , pour correspondre au filtre d'intention, une intention doit avoir un URI host et l'URI de l'intention < doit correspondre à l'un des URI host s du filtre. Si une intention a un URI port , pour correspondre à l'intention, un filtre d'intention doit avoir un URI port correspondant. Si un filtre d'intention a URI ports , pour correspondre au filtre d'intention, une intention doit avoir un port URI et le port URI de l'intention < doit correspondre à l'un des URI du filtre t s du filtre. Si une intention a un correspondant . Si un filtre d'intention possède des chemins URI , pour correspondre au filtre d'intention, une intention doit avoir un chemin URI et le chemin URI de l'intention
Une autre application crée une diffusion avec du code du type suivant:
Vous pouvez enregistrer un récepteur de diffusion dans votre AndroidManifest.Fichier xml:
Fournisseurs de contenu
Le fournisseur de contenu d'une application met les données à la disposition d'autres applications exécutées sur le même appareil. L'interface du fournisseur ressemble à l'interface d'une base de données, avec des tables, des lignes, des curseurs et tout ce qu'il y a de mieux. Par exemple, le code pour interroger un fournisseur de contenu ressemble à ceci:
Fragments
Un fragment
Lorsqu'une intention correspond au bon filtre d'intention, le résultat est une correspondance au ciel. Mais les règles pour faire correspondre les intentions avec les filtres sont compliquées. Les règles se lisent comme les clauses légales d'un contrat prénuptial.
Vous pouvez utiliser des méthodes Java pour décrire une intention. Voici quelques méthodes souvent utilisées:
