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

Uygulamanızı oluştururken cihazda, 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ı otomatik olarak uygulamanıza görünür hale getirir, ancak diğer uygulamaları varsayılan olarak filtreler. Bu kılavuzda, bu diğer uygulamaları, uygulamanız için 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ünür olanlar 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 göre, amaç imzasına göre veya sağlayıcı yetkilisine göre belirtin.

Belirli paket adları

Uygulamanızla entegre olan veya hizmetlerini kullandığınız uygulamalar gibi sorgulamak veya etkileşim kurmak istediğiniz belirli uygulamaları biliyorsanız bu uygulamaların paket adlarını <queries> öğesinin içinde 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 ana makine uygulamasıyla iletişim kurma

Bir Android kitaplığı geliştirirseniz AAR manifest dosyanıza bir <queries> öğesi ekleyerek paket görünürlüğü ihtiyaçlarınızı açıklayabilirsiniz. Bu <queries> öğesi, uygulamaların kendi manifest dosyalarında beyan edebileceği öğeyle aynı işlevlere sahiptir.

Kitaplığınız, bağlı hizmet gibi bir ana makine uygulamasıyla iletişim içeriyorsa 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() çağrısı yaparak uygulamayla etkileşim kurabilirsiniz. Bu etkileşimin sonucunda, kitaplığınızı kullanan arama uygulaması, ana makine uygulamasına 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 grup uygulamayı sorgulaması veya bunlarla etkileşim kurması gerekebilir ancak dahil edilecek belirli paket adlarını bilmiyor olabilirsiniz. Bu durumda, <queries> öğenizde amaç filtresi imzalarını listeleyebilirsiniz. Daha sonra uygulamanız, eşleşen <intent-filter> öğeleri içeren 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ıyacak 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.
  • Bir <data> öğesinde path, pathPrefix, pathPattern veya port özelliklerini kullanamazsınız. Sistem, her bir ö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 aynı anda 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 çeşitli metin ve joker karakterleri desteklemez.

Belirli bir yetkilinin kullanıldığı paketler

Bir içerik sağlayıcıyı sorgulamanız gerekiyorsa ancak belirli paket adlarını bilmiyorsanız sağlayıcı yetkilisini aşağıdaki snippet'te gösterildiği gibi bir <provider> öğesinde belirtebilirsiniz:

<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> öğesinin içinde bir veya daha fazla <provider> öğesi tanımlayabilirsiniz. <provider> öğesi, tek bir sağlayıcı yetkilisini veya noktalı virgülle ayrılmış bir sağlayıcı yetkilileri listesini 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 diğer tüm yüklü uygulamaları görmesine izin vermek için QUERY_ALL_PACKAGES iznini verir.

QUERY_ALL_PACKAGES izninin kullanılmasının uygun olduğu kullanım alanlarına bazı örnekler:

  • Erişilebilirlik uygulamaları
  • Tarayıcılar
  • Cihaz yönetimi uygulamaları
  • Güvenlik uygulamaları
  • Virüsten korunma 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ı yerine getirmek mümkündür. Kullanıcı gizliliğine saygı göstermek amacıyla uygulamanızın, çalışması için gereken en düşük paket görünürlüğünü istemesi gerekir.

Google Play'in bu politika güncellemesinde QUERY_ALL_PACKAGES iznine ihtiyacı olan uygulamalarla ilgili yönergeler sağlanmaktadır.