Metadata temel olarak, Android üzeride, tüm proje düzeyinde erişilebilecek verileri depolamak için ekstra bir seçenektir.
- Manifest dosyası içerisine tanımlanır.
- String, boolean, float ve int) olmak üzere 4 farklı veri tipi kaydedilebilir. (Int türü normal integer veya renk değeri alabilir.)
Aşağıda örnek string değeri metadata içerisinde değer ataması gösterilmiştir.
<manifest> <application android:icon="@drawable/icon" android:label="@string/app_name"> <meta-data android:name="my_metadata" 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>
Yukarıdaki metadata verisini ise Activity içerisinde ise aşağıdaki kod yardımıyla okunur:
ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); Bundle bundle = appInfo.metaData; String myApiKey = bundle.getString("my_metadata");
- Özelikle API ve library yazarken oldukça kullanışlıdır.
Mesela bir API yazdınız, bunu kullanan geliştirici ise key tanımlamak zorunda ki böylece sizin yazdığınız API’yı kullanabilsin. İşte burada kullanıcının girdiği keyi API’ya metadata yoluyla alınır ve API artık çalışır hale gelir, eğer kullanıcı keyi girmediyse hata bastırır keyi girmesini istersiniz. Aşağıda örnek kodu inceleyebilirsiniz.
try { ApplicationInfo appInfo = getPackageManager() .getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); Bundle bundle = appInfo.metaData; String myApiKey = bundle.getString("my_metadata"); } catch (Exception e) { Log.e(TAG, "Hey! Don't forget to configure <meta-data android:name=\"my_metadata\" android:value=\"testValue\"/> in your AndroidManifest.xml file."); }
Android metadata örneğini uygulamanıza admob reklamarı eklerken görebilirsiniz.
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" ndroid:value="@integer/your_admob_key" />
Buradaki kod, APPLICATION_ID’yi aşağısında verilen @integer/your_admob_key değeriyle birlikte sisteme yükleyecek ve Google Admob servisi de metadata’yı okuyacak, ardından buradaki değeri kullanarak uygulamanıza özel reklam banner’ı çalışacak.
Diğer bir örnek olarak manifest dosyası içerisindeki <activity> tagı içerisinde kullanımı verebiliriz. Böylece sistem, bu meta veriyi kullanarak o activity’i düzgünce açabilir.
<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>
Ardından activity tag’ından meta veriyi çekmek için aşağıdaki kodu kullanabilirsiniz.
try { ActivityInfo appInfo= getPackageManager() .getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA); Bundle bundle = appInfo.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()); }
Son olarak, meta veriyi içinde barındırabilen tag türleri şunlardır:
- activity
- activity-alias
- application
- provider
- receiver
- service