Что такое метаданные? А какая польза от этого в андроиде

Я новичок в Android, и я не видел и не слышал о метаданных раньше. Однако я гуглю и ищу на YouTube, что это в основном информация о вашем объекте. Поправь меня, если я ошибаюсь. Может ли кто-нибудь помочь мне понять это лучше.

1) Что такое метаданные?

2) Почему он используется в Android?

Будет хорошо, если будет дано объяснение на примере того, почему метаданные используются в Android. Я видел их в теге метаданных активности манифеста.

 cammando15 дек. 2016 г., 15:53
они просто используются для хранения данных в паре ключ-значение, которую можно вызвать из родительского компонента. Этого много знаний достаточно, отдыху нет конца исследованиям.

Ответы на вопрос(3)

Позвольте мне привести простой пример. Помогает в поиске дополнительной информации - это основное объяснение метаданных.

317-745-4618

Если я добавлю метаданные, это номер телефона, чем вы знаете, или из этого можно определить географическую область. Если бы я не сказал, что это номер телефона, у вас недостаточно метаданных, чтобы узнать, что это за объект. Это может быть SSN США или что-то еще.

Он используется в Android для добавления объектов в манифест, например, если использовать Сервис Google, можно добавить его для обозначения версии Сервисов Google, к которой привязано приложение.

Метаданные - это данные, которые описывают другие данные, чтобы сообщить другим приложениям, как использовать сами данные.

Использование Android:
Интенты - отличный пример для этого - если вы хотите передавать данные в намерениях, они должны быть примитивными, потому что в Android есть только предварительно созданные метаданные об объектах такого типа. (Строка и целое число имеют различную двоичную структуру, с которой система знает, как работать).

Intents также позволяет вам создавать свои собственные метаданные для ваших пользовательских объектов черезПосылка класс (этот процесс создания собственных метаданных вручную называетсясортировочный)

Решение Вопроса

В Android вы можете определитьmeta-data информация в вашемAndroidManifest.xml

ЗДЕСЬ DOCK LINK

Очень простое использование

По сути, это дополнительная опция для хранения информации, доступ к которой можно получить через весь проект. В этом случае,<meta-data> определяется за пределами<activity> тег и внутри<application> тег.

Определение:

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

Чтение:

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

Вы можете сохранитьboolean,int, String или плавать.

Это полезно для библиотеки или API

Допустим, вы создали API / LIB, который может быть использован для всех. Однако для конкретной процедуры вам понадобитсяKEY и этоKEY должен быть определен разработчиком, который будет использовать ваш API. Таким образом, вы не можете предсказать, каким ключом разработчик поделится.

С помощью<meta-data>разработчик, который хочет использовать вашу API / LIB, может поделитьсяKEY с тобой. Таким образом, вы оставляете свой API настроенным на чтение этого KEY и вызываете исключение, если пользователь не определил.

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.");
}

Одним из классических примеров является Google Ads (Admob).

Вы должны добавить следующую строку к вашему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" />

Это загрузитcom.google.android.gms.version со значением, представленным@integer/google_play_services_version, Тогда, вероятно, Google Play Services (Admob) прочтет этометаданные и он сможет определить версию службы Google Play, которую вы использовали при создании приложения.

Другой пример

Другое использование для<meta-data> когда их использовать для настройки Activity. Таким образом, вы можете передавать ценную информацию для Android о вашей активности, а затем Android может обрабатывать вашу деятельность должным образом. В этом случае<meta-data> тег добавлен внутри<activity> тег.

Первый пример, который я вижу, это когда вы определяете поисковую активность.

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

Затем, чтобы получить метаданные из тега активности, используйте это:

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());
    }
 FaisalAhmed02 авг. 2016 г., 05:57
Спасибо за ваше подробное и четкое объяснение. Это было очень полезно для меня.
 FaisalAhmed14 дек. 2018 г., 13:45
@AsifMushtaq Представьте, что вы однажды написали библиотеку Android, которая будет использоваться многими разработчиками. А вашей библиотеке нужен ключ для обработки данных. В этом случае разработчик, который использует вашу библиотеку, просто добавит этот ключ в манифест приложения в качестве метаданных. И этот ключ будет использоваться вашей библиотекой. Надеюсь, это имеет смысл
 Asif Mushtaq14 апр. 2018 г., 22:13
Привет, мы также можем объявить ключ вstring ресурс то, что особенного вmeta-data? значит, как вы упомянули выше<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> Я могу объявить то же самое, используя строковый ресурс<string name="com.google.android.gms.version">3.4</string> так что же особенного вmeta-data?

Ваш ответ на вопрос