web-dev-qa-db-fra.com

Qu'est-ce que les métadonnées? Et à quoi sert-il dans android

Je suis nouveau sur Android et je n'ai jamais vu ni entendu parler de métadonnées auparavant. Toutefois, je le recherche sur Google pour le rechercher sur YouTube, indiquant qu'il s'agit essentiellement d'une information de votre objet. Corrigez-moi si J'ai tort, est-ce que quelqu'un peut m'aider à mieux le comprendre?.

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

2) Pourquoi est-il utilisé dans Android?

Ce sera bien si l'explication est donnée avec un exemple de la raison pour laquelle les métadonnées sont utilisées dans Android. Je les ai vus dans la balise de métadonnées d'activité du manifeste.

46
FaisalAhmed

Sous Android, vous pouvez définir les informations meta-data dans votre AndroidManifest.xml

ICI IS LE LIEN DU QUAI

Utilisation très basique

Il s’agit essentiellement d’une option supplémentaire permettant de stocker des informations accessibles tout au long du projet. Dans ce cas, <meta-data> est défini à l'extérieur de la balise <activity> et à l'intérieur de la balise <application>.

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>

En train de lire:

ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myApiKey = bundle.getString("my_test_metagadata");

Vous pouvez enregistrer un boolean, un int, String ou un float.

C'est utile pour les bibliothèques ou les API

Supposons que vous ayez créé une API/LIB pouvant être utilisée par tout le monde. Cependant, pour une procédure spécifique, vous avez besoin de KEY et que KEY doit être défini par le développeur qui utilisera votre API. De cette façon, vous ne pouvez pas prédire quelle clé le développeur partagera.

En utilisant <meta-data>, un développeur qui souhaite utiliser votre API/LIB peut partager le KEY avec vous. Ainsi, vous laissez votre API configurée pour lire cette clé et créez une exception si l'utilisateur ne l'a pas défini.

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 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 avec la valeur représentée par @integer/google_play_services_version. Ensuite, les services Google Play (Admob) liront probablement ceci métadonnées et pourront déterminer la version du service Google Play que vous avez utilisée lors de la création de votre application.

Autre exemple

Une autre utilisation de <meta-data> consiste à les utiliser pour configurer une activité. De cette façon, vous pouvez transmettre des informations précieuses à Android sur votre activité, puis Android peut gérer votre activité correctement. Dans ce cas, le <meta-data> La balise est ajoutée à l'intérieur de la balise <activity>.

Le premier exemple que je vois concerne la définition d’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());
    }
71
W0rmH0le

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

317-745-4618

Si j'ajoute aux métadonnées qu'il s'agit d'un numéro de téléphone que vous connaissez ou pouvez déterminer la zone géographique à partir de cela. Si je ne dis pas que c'est un numéro de téléphone, vous n'avez pas assez de métadonnées pour savoir de quel objet il s'agit. Cela peut être un SSN américain ou autre chose.

Il est utilisé dans Android pour ajouter des objets au manifeste, par exemple, si vous utilisez le service Google, vous l'ajouterez pour désigner la version de Google Services à laquelle l'application est liée.

5
Fred Grott

Les métadonnées sont des données qui décrivent d'autres données pour informer d'autres applications de l'utilisation des données elles-mêmes.

Utilisation d'Android:
Les intentions sont un excellent exemple de cela - Si vous voulez transmettre des données dans les intentions, elles doivent être primitives, car Android ne dispose que de métadonnées préconstruites sur ce type d’objets. (String et integer ont une structure binaire différente avec laquelle le système sait travailler).

Les intentions vous permettent également de créer vos propres métadonnées dans vos objets personnalisés via la classe Parcel (ce processus de construction manuelle de vos propres métadonnées, appelé marshalling ).

3
Andro Secy