Dans Android, vous pouvez définir meta-data
informations dans votre AndroidManifest.xml
VOICI LE LIEN VERS LE DOCK
Utilisation très basique
Il s'agit essentiellement d'une option supplémentaire pour stocker des informations auxquelles on peut accéder à travers l'ensemble du projet. Dans ce cas, <meta-data>
est défini en dehors de <activity>
et à l'intérieur <application>
étiquette.
Définir :
<manifest>
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<meta-data android:name="my_test_metagadata" android:value="testValue" />
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<manifest>
Lecture :
ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myApiKey = bundle.getString("my_test_metagadata");
Vous pouvez sauvegarder un boolean
, un int
, String
ou flotteur.
C'est utile pour les bibliothèques ou les API
Disons que vous avez créé une API/LIB qui peut être utilisée par tout le monde. Cependant, pour une procédure spécifique, vous avez besoin d'une KEY
et que KEY
doit être définie par le développeur qui utilisera votre API. De cette façon, vous ne pouvez pas prévoir quelle clé le développeur partagera.
Utilisation de <meta-data>
un développeur qui souhaite utiliser votre API/LIB peut partager l'adresse de l'API/LIB. KEY
avec vous. De cette façon, vous laissez votre API configurée pour lire cette CLÉ et lever une exception si l'utilisateur ne l'a pas définie.
try {
ApplicationInfo ai = getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myApiKey = bundle.getString("my_test_metagadata");
} catch (Exception e) {
Log.e(TAG, "Dear developer. Don't forget to configure <meta-data android:name=\"my_test_metagadata\" android:value=\"testValue\"/> in your AndroidManifest.xml file.");
}
Un exemple classique est celui de Google Ads (Admob).
Vous devez ajouter la ligne suivante à votre AndroidManifest
:
<!--This meta-data tag is required to use Google Play Services. (adMob)-->
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
Ceci chargera com.google.android.gms.version
dont la valeur est représentée par @integer/google_play_services_version
. Ensuite, probablement, les services Google Play (Admob) liront ceci métadonnées et il sera en mesure de déterminer la version de Google Play Service que vous avez utilisée lorsque vous avez créé votre application.
Un autre exemple
Un autre usage pour <meta-data>
est de savoir quand les utiliser pour configurer une activité. De cette façon, vous pouvez transmettre des informations précieuses à Android sur votre activité, et ensuite Android peut gérer votre activité correctement. Dans ce cas, les <meta-data>
est ajouté à l'intérieur de la balise <activity>
étiquette.
Le premier exemple que je vois est lorsque vous définissez une activité de recherche.
<manifest>
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SearchableActivity" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
</application>
<manifest>
Ensuite, pour obtenir les méta-données de la balise d'activité, utilisez ceci :
try {
ActivityInfo ai = getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
if (bundle != null) {
String apiKey = bundle.getString("apikey");
Log.d(this.getClass().getSimpleName(), "apiKey = " + apiKey);
}
}
} catch (PackageManager.NameNotFoundException e) {
Utilities.log(this.getClass().getSimpleName(), "Failed to load meta-data, NameNotFound: " + e.getMessage());
} catch (NullPointerException e) {
Log.e(this.getClass().getSimpleName(), "Failed to load meta-data, NullPointer: " + e.getMessage());
}
0 votes
Ils sont juste utilisés pour le stockage des données dans la paire clé-valeur qui peut être appelée depuis le composant parent. Cette connaissance est suffisante pour que l'exploration soit sans fin.