私はAndroidを初めて使用しますが、メタデータについてはこれまで見たことも聞いたこともありません。しかし、私はそれをグーグルで検索し、YouTubeでそれが基本的にあなたのオブジェクトの情報であることを検索します。間違っている場合は修正してください。誰でも私がそれをより良い方法で理解するのを助けることができますか?.
1)メタデータとは何ですか?
2)Androidで使用されるのはなぜですか?
Androidでメタデータが使用される理由の例を説明するとよいでしょう。マニフェストのアクティビティメタデータタグ内でそれらを見てきました。
Androidでは、meta-data
でAndroidManifest.xml
情報を定義できます
非常に基本的な使用法
基本的に、プロジェクト全体からアクセスできる情報を保存するための追加オプションです。この場合、<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
、またはfloatを保存できます。
ライブラリまたはAPIに役立ちます
誰でも使用できるAPI/LIBを作成したとしましょう。ただし、特定の手順では、KEY
が必要であり、KEY
はAPIを使用する開発者が定義する必要があります。この方法では、開発者が共有するキーを予測できません。
<meta-data>
を使用すると、API/LIBを使用したい開発者がKEY
を共有できます。この方法では、ユーザーが定義しなかった場合、そのKEYを読み取り、例外を発生させるようにAPIを構成したままにします。
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.");
}
1つの典型的な例は、Google広告(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)がこのmetadataを読み取り、アプリの作成時に使用したGoogle Play Serviceのバージョンを判別できるようになります。
別の例
<meta-data>
のもう1つの使用法は、アクティビティを構成するために使用する場合です。これにより、アクティビティに関する重要な情報を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());
}
簡単な例を挙げましょう。追加情報を見つけるのに役立ちます-メタデータの基本的な説明です。
317-745-4618
メタデータを追加すると、それはあなたが知っているよりも電話番号であるか、これから地理的領域を把握することができます。電話番号だと言わなかった場合は、これがどんなオブジェクトかを知るのに十分なメタデータを持っていません。 US SSNの場合もあれば、他の何かの場合もあります。
Androidでマニフェストにオブジェクトを追加するために使用されます。たとえば、Googleサービスを使用して、アプリがバインドするGoogleサービスのバージョンを指定する場合に追加します。
メタデータは、他のデータを記述するデータであり、他のアプリケーションにデータ自体の使用方法を通知します。
Androidの使用:
インテントはその良い例です。データをインテントに渡したい場合、Androidにはこれらの種類のオブジェクトに関する事前構築メタデータのみがあるため、プリミティブである必要があります。 (文字列と整数は、システムがどのように作業するかを知っている異なるバイナリ構造を持っています)。
また、インテントを使用すると、 Parcel クラスを介してカスタムオブジェクトに独自のメタデータを構築できます(このプロセスでは、 マーシャリング と呼ばれる独自のメタデータを手動で構築します)