Skip to content
  • About me

Nurettin Abacı Blog

Drugs for programming
Close

Nurettin Abacı Blog

Drugs for programming
  • About me

Android Metadata

  • by Nurettin Abacı
  • 27/10/201903/11/2019
  • 2 min read

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
Tags:android metadatametadata

Search

Categories

  • Android
  • Computer Vision
  • Derin Öğrenme
  • Django
  • git
  • Go
  • Görüntü İşleme
  • Linux
  • Python
  • RaspberryPi
  • Search Engines
  • Software Dev
  • SQL Server

https://bit.ly/3IhJVRf

SQL Öğrenmenin Tam Zamanı

Arşiv

  • August 2023
  • July 2023
  • June 2023
  • March 2023
  • January 2023
  • December 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • March 2022
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • January 2021
  • November 2020
  • October 2020
  • August 2020
  • April 2020
  • March 2020
  • November 2019
  • October 2019
  • September 2019
  • May 2019
  • April 2019
  • March 2019
  • January 2019
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018