Paket görünürlüğüyle ilgili gereksinimleri bildirme

Uygulamanızı oluştururken, uygulamanızın etkileşimde bulunması gereken diğer uygulamaları dikkate almanız önemlidir. Uygulamanız Android 11 (API düzeyi 30) veya sonraki sürümleri hedefliyorsa sistem bazı uygulamaları uygulamanız tarafından otomatik olarak görünür hale getirir ancak diğer uygulamaları varsayılan olarak filtreler. Bu kılavuzda, diğer uygulamaları uygulamanıza nasıl görünür hale getireceğiniz açıklanmaktadır.

Uygulamanız Android 11 veya sonraki bir sürümü hedefliyorsa ve otomatik olarak görünenler dışındaki uygulamalarla etkileşimde bulunması gerekiyorsa <queries> öğesini uygulamanızın manifest dosyasına ekleyin. <queries> öğesinde diğer uygulamaları aşağıdaki bölümlerde açıklandığı gibi paket adına, amaç imzasına veya sağlayıcı yetkilisine göre belirtin.

Belirli paket adları

Uygulamanızla entegre olan veya hizmetlerini kullandığınız uygulamalar gibi sorgulamak ya da etkileşimde bulunmak istediğiniz uygulamaları biliyorsanız paket adlarını <queries> öğesinin içine <package> öğesi grubu şeklinde ekleyin:

<manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>

Kitaplıktaki ana makine uygulamasıyla iletişim kurma

Android kitaplığı geliştiriyorsanız AAR manifest dosyanıza bir <queries> öğesi ekleyerek paket görünürlüğü gereksinimlerinizi beyan edebilirsiniz. Bu <queries> öğesi, uygulamaların kendi manifest dosyalarında tanımlayabileceği öğeyle aynı işleve sahiptir.

Kitaplığınız bir ana makine uygulamasıyla iletişim içeriyorsa (ör. bağlı hizmet kullanma) ana makine uygulamasını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 uygulama ile etkileşimde bulunabilirsiniz. Bu etkileşimin sonucunda, kitaplığınızı kullanan çağrıyı yapan uygulama, ana makine uygulaması tarafından otomatik olarak görünür hale gelir.

Amaç filtresi imzasıyla eşleşen paketler

Uygulamanızın belirli bir amaca hizmet eden bir uygulama grubunu sorgulaması veya etkileşimde bulunması gerekebilir, ancak dahil edilecek belirli paket adlarını bilemeyebilirsiniz. Bu durumda, <queries> öğenizde amaç filtresi imzalarını listeleyebilirsiniz. Böylece uygulamanız, 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örmesini sağlayacak 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> öğesinde birkaç kısıtlama vardır:

  • Tam olarak bir <action> öğesi eklemeniz gerekir.
  • path, pathPrefix, pathPattern veya port özelliklerini bir <data> öğesinde kullanamazsınız. Sistem, her özelliğin değerini genel joker karaktere (*) ayarlamışsınız gibi davranır.
  • Bir <data> öğesinin mimeGroup özelliğini kullanamazsınız.
  • Tek bir <intent> öğesinin <data> öğelerinde, aşağıdaki özelliklerin her birini en fazla bir kez kullanabilirsiniz:

    • mimeType
    • scheme
    • host

    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> öğesinin name özelliği.
  • Bir <data> öğesinin (image/*) mimeType özelliğinin alt türü.
  • Bir <data> öğesinin (*/*) mimeType özelliğinin türü ve alt türü.
  • Bir <data> öğesinin scheme özelliği.
  • Bir <data> öğesinin host özelliği.

Önceki listede aksi belirtilmedikçe sistem, prefix* gibi metin ve joker karakterlerin karışımını desteklemez.

Belirli bir yetkiliyi 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 bir <provider> öğesinde sağlayıcı yetkilisini beyan edebilirsiniz:

<manifest package="com.example.suite.enterprise">
    <queries>
        <provider android:authorities="com.example.settings.files" />
    </queries>
    ...
</manifest>

Sağlayıcı yetkililerini tek bir <queries> öğesinde belirtebilirsiniz. <queries> öğesi içinde bir veya daha fazla <provider> öğesi tanımlayabilirsiniz. Bir <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çerdiği bileşenlerden bağımsız olarak bir cihazdaki tüm yüklü uygulamaları sorgulaması veya bu uygulamalarla etkileşimde bulunması gerekebilir. Sistem, uygulamanızın diğer tüm yüklü uygulamaları görebilmesi için QUERY_ALL_PACKAGES iznini sağlar.

QUERY_ALL_PACKAGES izninin dahil edilmesinin uygun olduğu kullanım alanlarına örnek olarak aşağıdakiler verilebilir:

  • Erişilebilirlik uygulamaları
  • Tarayıcılar
  • Cihaz yönetimi uygulamaları
  • Güvenlik uygulamaları
  • Virüsten korunma uygulamaları

Bununla birlikte, genellikle otomatik olarak görülebilen uygulama grubuyla etkileşimde bulunarak ve uygulamanızın erişmesi gereken diğer uygulamaları manifest dosyanızda bildirerek uygulamanızın kullanım alanlarını yerine getirmek mümkündür. Kullanıcı gizliliğine saygı duymak adına, uygulamanızın çalışması için gereken en az miktarda paket görünürlüğü istemesi gerekir.

Google Play'den yapılan bu politika güncellemesinde, QUERY_ALL_PACKAGES iznine ihtiyaç duyan uygulamalar için yönergeler sağlanmaktadır.