Uygulamanızı oluştururken cihazda uygulamanızın etkileşim kurması gereken diğer uygulamaları göz önünde bulundurmanız önemlidir. Uygulamanız Android 11'i (API düzeyi 30) veya sonraki sürümleri hedefliyorsa sistem, bazı uygulamaları otomatik olarak uygulamanız tarafından görülebilir hale getirir ancak diğer uygulamaları varsayılan olarak filtreler. Bu kılavuzda, diğer uygulamaların uygulamanız tarafından nasıl görünür hale getirileceği açıklanmaktadır.
Uygulamanız Android 11 veya sonraki sürümleri hedefliyorsa ve otomatik olarak görünen uygulamalar dışındaki uygulamalarla etkileşim kurması gerekiyorsa uygulamanızın manifest dosyasına <queries> öğesini ekleyin. <queries> öğesinde, diğer uygulamaları aşağıdaki bölümlerde açıklandığı gibi paket adına göre, intent imzasına göre veya sağlayıcı yetkisine göre belirtin.
Belirli paket adları
Sorgulamak veya etkileşimde bulunmak istediğiniz belirli uygulamaları biliyorsanız (ör. uygulamanızla entegre olan uygulamalar veya hizmetlerini kullandığınız uygulamalar) bunların paket adlarını <queries> öğesinin içindeki bir <package> öğesi grubuna ekleyin:
<manifest package="com.example.game"> <queries> <package android:name="com.example.store" /> <package android:name="com.example.services" /> </queries> ... </manifest>
Kitaplıktaki bir ana uygulamayla iletişim kurma
Android kitaplığı geliştiriyorsanız AAR manifest dosyanıza <queries> öğesi ekleyerek paket görünürlüğü ihtiyaçlarınızı beyan edebilirsiniz. Bu <queries> öğesi, uygulamaların kendi manifest dosyalarında tanımlayabileceği öğeyle aynı işleve sahiptir.
Kitaplığınız, bağlama hizmeti kullanmak gibi bir ana uygulamayla iletişim içeriyorsa ana uygulamanın paket adını belirten bir <package> öğesi ekleyin:
<!-- Place inside the <queries> element. --> <package android:name=PACKAGE_NAME />
Bu beyanı ekleyerek ana makine uygulamasının yüklü olup olmadığını kontrol edebilir ve bindService() yöntemini çağırarak uygulamayla etkileşim kurabilirsiniz.
Kitaplığınızı kullanan arama uygulaması, bu etkileşim sonucunda ana makine uygulaması tarafından otomatik olarak görünür hale gelir.
Bir intent filtresi imzasıyla eşleşen paketler
Uygulamanızın belirli bir amaca hizmet eden bir dizi uygulamayı sorgulaması veya bunlarla etkileşimde bulunması gerekebilir ancak dahil edilecek belirli paket adlarını bilmiyor olabilirsiniz. Bu durumda, <queries> öğenizde intent filtresi imzalarını listeleyebilirsiniz. Uygulamanız daha sonra eşleşen <intent-filter> öğelerine sahip uygulamaları keşfedebilir.
Aşağıdaki kod örneğinde, uygulamanın JPEG resim paylaşımını destekleyen diğer yüklü uygulamaları görmesine olanak tanıyan bir <intent> öğesi gösterilmektedir:
<manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> </queries> ... </manifest>
<intent> öğesinin birkaç kısıtlaması vardır:
- Tam olarak bir
<action>öğesi eklemeniz gerekir. <data>öğesindepath,pathPrefix,pathPatternveyaportözelliklerini kullanamazsınız. Sistem, her bir özelliğin değerini genel joker karakter (*) olarak ayarlamışsınız gibi davranır.<data>öğesininmimeGroupözelliğini kullanamazsınız.Tek bir
<intent>öğesinin<data>öğelerinde, aşağıdaki özelliklerin her birini en fazla bir kez kullanabilirsiniz:mimeTypeschemehost
Bu özellikleri birden fazla
<data>öğesine dağıtabilir veya tek bir<data>öğesinde kullanabilirsiniz.
<intent> öğesi, birkaç özelliğin değeri olarak genel joker karakteri (*) destekler:
<action>öğesininnameözelliği.<data>öğesinin (image/*)mimeTypeözelliğinin alt türü.- Bir
<data>öğesininmimeTypeözelliğinin türü ve alt türü (*/*). <data>öğesininschemeözelliği.<data>öğesininhostözelliği.
Önceki listede aksi belirtilmediği sürece sistem, metin ve joker karakterlerin karışımını (ör. prefix*) desteklemez.
Belirli bir yetkiyi kullanan paketler
Bir içerik sağlayıcıyı sorgulamanız gerekiyorsa ancak belirli paket adlarını bilmiyorsanız aşağıdaki snippet'te gösterildiği gibi sağlayıcı yetkisini bir <provider> öğesinde bildirebilirsiniz:
<manifest package="com.example.suite.enterprise"> <queries> <provider android:authorities="com.example.settings.files" /> </queries> ... </manifest>
Sağlayıcı yetkililerini tek bir <queries> öğesinde bildirebilirsiniz. <queries> öğesinde bir veya daha fazla <provider> öğesi tanımlayabilirsiniz. <provider> öğesi, tek bir sağlayıcı yetkilisi veya noktalı virgülle ayrılmış sağlayıcı yetkilileri listesi içerebilir.
Tüm uygulamalar (önerilmez)
Nadir durumlarda uygulamanızın, içerdikleri bileşenlerden bağımsız olarak bir cihazda yüklü tüm uygulamaları sorgulaması veya bunlarla etkileşimde bulunması gerekebilir. Sistem, uygulamanızın yüklü diğer tüm uygulamaları görmesine izin vermek için QUERY_ALL_PACKAGES iznini sağlar.
QUERY_ALL_PACKAGES izninin eklenmesinin uygun olduğu kullanım alanlarına bazı örnekler:
- Erişilebilirlik uygulamaları
- Tarayıcılar
- Cihaz yönetimi uygulamaları
- Güvenlik uygulamaları
- Antivirüs uygulamaları
Ancak genellikle otomatik olarak görünür olan uygulama grubuyla etkileşim kurarak ve uygulamanızın erişmesi gereken diğer uygulamaları manifest dosyanızda beyan ederek uygulamanızın kullanım alanlarını karşılamak mümkündür. Kullanıcı gizliliğine saygı göstermek için uygulamanız, çalışması için gereken en az paket görünürlüğü miktarını istemelidir.
Google Play'in bu politika güncellemesi, QUERY_ALL_PACKAGES iznine ihtiyaç duyan uygulamalar için yönergeler sağlar.