73 votes

Qu'est-ce que les métadonnées ? Et quelle est leur utilité dans Android

Je suis nouveau sur Android et je n'ai jamais vu ou entendu parler des métadonnées auparavant. Cependant, j'ai cherché sur Google et sur YouTube que c'est essentiellement une information de votre objet. Corrigez-moi si je me trompe. Est-ce que quelqu'un peut m'aider à mieux comprendre.

1) Qu'est-ce que les métadonnées ?

2) Pourquoi est-il utilisé dans Android ?

Il serait bon que l'explication soit donnée avec un exemple de l'utilisation des métadonnées dans Android. Je les ai vues à l'intérieur de la balise metadata de l'activité du manifeste.

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.

131voto

Guilherme P Points 2153

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

Merci pour votre explication détaillée et claire. Elle m'a été très utile.

2 votes

Hi nous pouvons également déclarer la clé dans le string alors qu'est-ce qui est spécial dans la meta-data ? c'est-à-dire, comme vous le mentionnez ci-dessus <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> Je peux déclarer la même chose en utilisant une ressource de type chaîne <string name="com.google.android.gms.version">3.4</string> alors qu'est-ce qui est spécial dans le meta-data ?

0 votes

@AsifMushtaq Imaginez que vous ayez écrit une bibliothèque Android qui sera utilisée par de nombreux développeurs. Et votre bibliothèque a besoin de certaines clés pour traiter les données. Dans ce cas, le développeur qui utilise votre bibliothèque ajoutera simplement ces clés dans le manifeste de l'application en tant que métadonnées, et ces clés seront utilisées par votre bibliothèque.

6voto

Fred Grott Points 2004

Laissez-moi vous donner un exemple simple. Il permet de trouver des informations supplémentaires - c'est l'explication de base des métadonnées.

317-745-4618

Si j'ajoute les métadonnées indiquant qu'il s'agit d'un numéro de téléphone, vous connaissez ou pouvez déterminer la zone géographique à partir de ces données. Si je ne précise pas qu'il s'agit d'un numéro de téléphone, vous ne disposez pas de suffisamment de métadonnées pour savoir de quel objet il s'agit. Il peut s'agir d'un SSN américain ou d'autre chose.

Il est utilisé dans Android pour ajouter des objets au manifeste, par exemple si l'on utilise Google Service, on l'ajoutera pour désigner la version de Google Services à laquelle l'application se lie.

3voto

Andro Secy Points 3939

Les métadonnées sont des données qui décrivent d'autres données afin d'informer d'autres applications sur la manière d'utiliser les données elles-mêmes.

Utilisation d'Android :
Les intents en sont un bon exemple - Si vous voulez passer des données dans des intents, elles doivent être primitives car Android ne dispose que de métadonnées pré-construites sur ce type d'objets. (Les chaînes et les entiers ont une structure binaire différente avec laquelle le système sait travailler).

Les intents vous permettent également de créer vos propres métadonnées pour vos objets personnalisés via la fonction Parcelle (ce processus de construction manuelle de vos propres métadonnées appelées marshalling )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X