# 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.