# 2021-02-17 | Kotlin | Composants ###### tags: `kotlin` `android` `gobelins` # Contexte Permet d'accéder aux ressources, à des services de base (alamre, notifications...) Le SDK permet de récupérer le contexte facilement Exemple de récupération du contexte : ```java= getContexte() getBaseContexte() getApplicationContexte() MainActivity mainActivity = MainActivity.this; mainActivity.getString(R.string.app_name); ``` # Manifest * Ficher xml qui définit la configuration de l'application * Définit les composants d'une app (Activités, permissions, services...) * Utilisé par le système pour gérer l'app (lancer l'application...) * Fichier obligatoire dans toute les applications ```xml= <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ameliemouillac.gmail.exampledmii1"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.ExampleDMII1"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> ``` ## Permissions * Les permissions sont renseignées dans le manifest * Elles permettent de protéger la vie privée des utilisateurs * Etre transparent par rapport aux utilisateurs ## Features * Les features sont renseignées dans le manifest * Utilisation de composants hardware du téléphone (exemple : NFC - paiement sans contact) * Indiquer les features obligatoire pour utiliser l'application * Si le téléphone n'a pas la feature indiquée, alors il n'est pas possible d'installer l'application (elle n'apparaît pas dans le playstore) ## Application * Définit les composants de l'application # Intents, Intentions * Permettent de décrire une action à éxecuter * Communiquer avec les autres composants du système (ex : lancer la caméra, appeler un numpéro de téléphone, connaîtrela position de l'utilisateurs...) Par exemple, pour passer d'une vue à une autre, c'est le SDK qui s'en charge. On indique alors cette action avec les intents. Une intention se décompose en 3 parties : 1. Origine : créer l'intention 2. Système : traiter l'intention 3. Destination : éxecuter l'intention L'origine et la destination peuvent être la même application. ```java= //explicite Intent intention = new Intent(MainActivity.this,SecondActivity.class); startActivity(intention); //implicite Uri uri = Uri.parse("https://panda.com"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); ``` ## Inbtentions explicite Je peux fournir toute les informations ## Intentions implicite Je ne peux pas forunir toute les infos (par exemple je ne sais pas par quel application l'utilisateur envoie des mails - gmail, yahoo...) ## Filtres d'intentions * Déclarer uen lmiste d'intentions * Dire à quelle action je suis capable de répondre * Déclarées dans le manifest ```xml= <!--AndroidManifest.xml--> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ``` ## Passer des données On peut utiliser putExtra pour partager des données via un intent (= Bundle) ```java= // MainActivity Intent intention = new Intent(MainActivity.this,SecondActivity.class); intention.putExtra("value1", "hello world"); startActivity(intention); //SecondActivity String value1 = getIntent().getStringExtra("value1"); ``` Dans l'exemple ci-dessus, on utilise une valeur en dur, mais on peut également passer des models que l'on a nous-même créé (getParcelableExtra()), ou des valeurs issues d'un formulaire par exemple.