Uygulamanızı oluştururken, uygulamanızın etkileşimde bulunması gereken cihazdaki 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ı uygulamanız için otomatik olarak görünür hale getirir ancak diğer uygulamaları varsayılan olarak filtreler. Bu kılavuzda, diğer uygulamaların uygulamanızda 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ünür olanlar dışındaki uygulamalarla etkileşimde bulunması gerekiyorsa uygulamanızın manifest dosyasına <queries>
öğesini ekleyin. <queries>
öğesinde, diğer uygulamaları paket adına göre, amaç imzasına göre veya sağlayıcı yetkisine göre belirtin. Bu yöntemler aşağıdaki bölümlerde açıklanmıştır.
Belirli paket adları
Sorgulamak veya etkileşimde bulunmak istediğiniz belirli uygulamaları (ör. uygulamanızla entegre olan uygulamalar veya hizmetlerini kullandığınız uygulamalar) biliyorsanız bu uygulamaların paket adlarını <queries>
öğesinin içindeki bir <package>
öğeleri 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 <queries>
öğesini AAR manifest dosyanıza ekleyerek paket görünürlüğü ihtiyaçlarınızı belirtebilirsiniz. Bu <queries>
öğesi, uygulamaların kendi manifest dosyalarında bildirebileceği öğeyle aynı işlevselliğe sahiptir.
Kitaplığınız bir ana makine uygulamasıyla iletişimi 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 bildirimi ekleyerek ana uygulamanın yüklü olup olmadığını kontrol edebilir ve bindService()
'ı arama gibi işlemlerle uygulamayla etkileşimde bulunabilirsiniz.
Kitaplığınızı kullanan arama uygulaması, bu etkileşim sonucunda ana makine uygulaması için 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 grup uygulamayla sorgu göndermesi veya etkileşimde bulunması gerekebilir ancak dahil edilecek paket adlarını bilmiyor olabilirsiniz. Bu durumda, <queries>
öğenizde amaç filtresi imzalarını listeleyebilirsiniz. Uygulamanız daha sonra <intent-filter>
öğeleriyle eşleşen 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>
öğesiyle ilgili birkaç kısıtlama vardır:
- Tam olarak bir
<action>
öğesi eklemelisiniz. path
,pathPrefix
,pathPattern
veyaport
özelliklerini<data>
öğesinde kullanamazsınız. Sistem, her ö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: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>
öğesininname
özelliği.<data>
öğesininmimeType
özelliğinin alt türü (image/*
).<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 yetkiliyi kullanan paketler
Bir içerik sağlayıcıya sorgu göndermeniz gerekiyorsa ancak belirli paket adlarını bilmiyorsanız sağlayıcı yetkisini aşağıdaki snippet'te gösterildiği gibi bir <provider>
öğesinde bildirebilirsiniz:
<manifest package="com.example.suite.enterprise"> <queries> <provider android:authorities="com.example.settings.files" /> </queries> ... </manifest>
Sağlayıcı yetkilerini tek bir <queries>
öğesinde bildirebilirsiniz. <queries>
öğesinde bir veya daha fazla <provider>
öğesi bildirebilirsiniz. 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)
Nadiren de olsa uygulamanızın, içerdiği bileşenlerden bağımsız olarak bir cihaza yüklenen tüm uygulamalarla sorgu göndermesi veya etkileşimde bulunması gerekebilir. Sistemin, uygulamanızın yüklü diğer tüm uygulamaları görmesine izin vermek için sağladığı izin QUERY_ALL_PACKAGES
'dir.
Aşağıda, QUERY_ALL_PACKAGES
izninin dahil edilmesinin uygun olduğu bazı kullanım alanlarına örnekler verilmiştir:
- 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 uygulama grubuyla etkileşim kurarak ve uygulamanızın erişmesi gereken diğer uygulamaları manifesto dosyanızda belirterek uygulamanızın kullanım alanlarını karşılamanız mümkündür. Kullanıcı gizliliğine saygı göstermek için uygulamanızın çalışması için gereken en küçük paket görünürlüğü miktarını istemesi gerekir.
Google Play'in bu politika güncellemesi, QUERY_ALL_PACKAGES
izni gerektiren uygulamalarla ilgili yönergeler sunar.