Bu dokümanda, bir uygulamanın etkileşimde bulunduğu bazı yaygın kullanım diğer uygulamalar. Her bölümde uygulamanın nasıl başarıya ulaştırılacağı konusunda yol gösterici bilgiler göz önünde bulundurmanız gereken, sınırlı paket görünürlüğü olan Uygulamanız Android 11 (API düzeyi 30) veya sonraki bir sürümü hedefliyorsa.
Android 11 veya sonraki sürümleri hedefleyen bir uygulama,
başka bir uygulamada bir etkinlik başlatırsanız, en basit yaklaşım bu işlemi
anlamak ve
ActivityNotFoundException
istisna olarak kullanabilirsiniz.
Uygulamanızın bir bölümü, çağrının
startActivity()
bir öğe eklemesi gibi başarılı olabilir.
Uygulamanızın <queries>
öğesi
manifest'ini kullanabilirsiniz. Bu genellikle bir <intent>
öğesidir.
Açık URL'ler
Bu bölümde, hedef kitleyi hedefleyen bir uygulamada URL'leri açmanın çeşitli yolları Android 11 veya sonraki sürümler.
URL'leri tarayıcıda veya başka bir uygulamada açma
Bir URL'yi açmak için şunu içeren bir intent kullanın:
ACTION_VIEW
intent işlemi,
ilişkin daha fazla bilgi için web'de yükleme
URL'yi tıklayın. startActivity()
adlı kişiyi aradıktan sonra
Bu amaç kullanıldığında aşağıdakilerden biri gerçekleşir:
- URL, bir web tarayıcısı uygulamasında açılır.
- URL, URL'yi derin bir bağlantı'yı tıklayın.
- Kullanıcının hangi uygulamayı seçmesini sağlayan bir açıklama iletişim kutusu görünür URL'yi açar.
Cihazınızda URL'yi açabilecek bir uygulama yüklü olmadığından
ActivityNotFoundException
hatası oluşur. (Bu olağan dışıdır.)Uygulamanızın
ActivityNotFoundException
.
startActivity()
yöntemi, her bir işlem için
başka bir uygulamanın etkinliğini başlatmak için <queries>
eklemeniz gerekmez
öğesini uygulamanızın manifest dosyasına ekleyin veya mevcut <queries>
öğesine dokunun. Bu, bir URL'yi açan örtülü ve açık amaçlar için geçerlidir.
Tarayıcının kullanılabilir olup olmadığını kontrol etme
Bazı durumlarda, uygulamanız en az bir tarayıcı olduğunu doğrulamak isteyebilir
belirli bir tarayıcının varsayılan tarayıcı olmasına dikkat edin.
kontrol edin. Bu gibi durumlarda
Manifest dosyanızdaki <queries>
öğesinin bir parçası olarak <intent>
öğesi:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent>
queryIntentActivities()
işlevini çağırıp bağımsız değişken olarak bir web intent'i ilettiğinizde, döndürülen listede bazı durumlarda mevcut tarayıcı uygulamaları yer alır. Liste
kullanıcı URL'yi
tarayıcı dışı bir uygulama olarak
belirleyebilir.
URL'leri özel sekmelerde açma
Özel Sekmeler,
tarayıcınızın görünümünü ve tarzını özelleştirebilirsiniz. Uygulama manifestinize <queries>
öğesini eklemeniz veya değiştirmeniz gerekmeden bir URL'yi Özel Sekme'de açabilirsiniz.
Ancak cihazınızda Özel Sekmeler'i destekleyen bir tarayıcı olup olmadığını kontrol edebilir veya CustomTabsClient.getPackageName()
simgesini kullanarak Özel Sekmeler ile açılacak belirli bir tarayıcı seçebilirsiniz.
Böyle durumlarda, şu <intent>
öğesini
Manifest dosyanızdaki <queries>
öğesi:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.support.customtabs.action.CustomTabsService" /> </intent>
Tarayıcı olmayan uygulamaların URL'leri işlemesine izin ver
Uygulamanız URL'leri Özel Sekmeler kullanarak açabilse bile,
mümkünse tarayıcı olmayan bir uygulamanın bir URL'yi açmasına izin verin. Bunu sağlamak için
özelliğini kullanıyorsanız, bir intent kullanarak startActivity()
çağrısı yapmayı deneyin
ilk adımı
FLAG_ACTIVITY_REQUIRE_NON_BROWSER
intent işareti Sistem bir ActivityNotFoundException
atarsa uygulamanız şunları yapabilir:
ardından URL'yi Özel Sekmede açın.
Bir intent bu işareti içeriyorsa startActivity()
çağrısı,
Aşağıdakilerden biri olduğunda ActivityNotFoundException
atılır
şu koşulların gerçekleşmesi durumunda:
- Görüşmede doğrudan bir tarayıcı uygulaması başlatılır.
- Çağrıda kullanıcıya yalnızca kullanıcının kendisi için geçerli olan tarayıcı uygulamaları da var.
Aşağıdaki kod snippet'i,
FLAG_ACTIVITY_REQUIRE_NON_BROWSER
amaç işareti:
Kotlin
try { val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply { // The URL should either launch directly in a non-browser app (if it's // the default) or in the disambiguation dialog. addCategory(CATEGORY_BROWSABLE) flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER } startActivity(intent) } catch (e: ActivityNotFoundException) { // Only browser apps are available, or a browser is the default. // So you can open the URL directly in your app, for example in a // Custom Tab. openInCustomTabs(url) }
Java
try { Intent intent = new Intent(ACTION_VIEW, Uri.parse(url)); // The URL should either launch directly in a non-browser app (if it's the // default) or in the disambiguation dialog. intent.addCategory(CATEGORY_BROWSABLE); intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REQUIRE_NON_BROWSER); startActivity(intent); } catch (ActivityNotFoundException e) { // Only browser apps are available, or a browser is the default. // So you can open the URL directly in your app, for example in a // Custom Tab. openInCustomTabs(url); }
Açıklama amaçlı iletişim kutusundan kaçınma
Kullanıcılara belirli bir işlem sırasında gösterilen açıklamada
onlar da bir URL açar ve bunun yerine URL'yi bu bölümde
durumlarda, hedef kitlenizin
FLAG_ACTIVITY_REQUIRE_DEFAULT
intent işareti
Bir intent bu işareti içeriyorsa startActivity()
çağrısı,
Çağrıda bir ActivityNotFoundException
kullanıcıya açıklama iletişim kutusu bulunur.
Bir intent hem bu işareti hem de
FLAG_ACTIVITY_REQUIRE_NON_BROWSER
intent işareti, startActivity()
çağrısı yapıldığında ActivityNotFoundException
değeri şu koşullardan biri gerçekleştiğinde atılır:
- Arama, doğrudan tarayıcı uygulamasını başlatırdı.
- Aramada kullanıcıya açıklama amaçlı bir iletişim kutusu gösterilirdi.
Aşağıdaki kod snippet'i, FLAG_ACTIVITY_REQUIRE_NON_BROWSER
öğesinin nasıl kullanılacağını göstermektedir
ve FLAG_ACTIVITY_REQUIRE_DEFAULT
işaret birlikte:
Kotlin
val url = URL_TO_LOAD try { // For this intent to be invoked, the system must directly launch a // non-browser app. val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply { addCategory(CATEGORY_BROWSABLE) flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER or FLAG_ACTIVITY_REQUIRE_DEFAULT } startActivity(intent) } catch (e: ActivityNotFoundException) { // This code executes in one of the following cases: // 1. Only browser apps can handle the intent. // 2. The user has set a browser app as the default app. // 3. The user hasn't set any app as the default for handling this URL. openInCustomTabs(url) }
Java
String url = URL_TO_LOAD; try { // For this intent to be invoked, the system must directly launch a // non-browser app. Intent intent = new Intent(ACTION_VIEW, Uri.parse(url)); intent.addCategory(CATEGORY_BROWSABLE); intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REQUIRE_NON_BROWSER | FLAG_ACTIVITY_REQUIRE_DEFAULT); startActivity(intent); } catch (ActivityNotFoundException e) { // This code executes in one of the following cases: // 1. Only browser apps can handle the intent. // 2. The user has set a browser app as the default app. // 3. The user hasn't set any app as the default for handling this URL. openInCustomTabs(url); }
Dosya aç
Uygulamanız dosyaları veya ekleri işliyorsa (örneğin, bir cihazın bu işlemleri yapıp yapamayacağını kontrol etme)
bir etkinlik başlatmanın en kolay yolu,
dosyayı işleyebilir. Bunu yapmak için ACTION_VIEW
amacını içeren bir intent kullanın
işlemini ve söz konusu dosyayı temsil eden URI'yı içerir. Google Chrome'da
uygulamanız ActivityNotFoundException
cihazını yakalayabilir. İstisna işleme mantığınızda bir hata gösterebilir veya dosyayı kendiniz işlemeye çalışabilirsiniz.
Uygulamanızın, başka bir uygulamanın belirli bir dosyayı açıp açamayacağını önceden bilmesi gerekiyorsa
<intent>
öğesini,
Manifest'inizde <queries>
öğesi. Biliyorsanız dosya türünü de ekleyin
olduğunu anlayabilir.
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.VIEW" /> <!-- If you don't know the MIME type in advance, set "mimeType" to "*/*". --> <data android:mimeType="application/pdf" /> </intent>
Ardından, resolveActivity()
numaralı telefonu arayarak bir uygulamanın kullanılabilir olup olmadığını kontrol edebilirsiniz
inandırıcılığınızı artırır.
URI erişimi ver
Not: URI erişim izinlerinin bu bölümde açıklandığı şekilde beyan edilmesi, Android 11'i (API düzeyi 30) veya sonraki sürümleri hedefleyen uygulamalar için zorunludur ve hedef SDK sürümlerinden ve içerik sağlayıcılarını dışa aktarıp aktarmadıklarına bakılmaksızın tüm uygulamalar için önerilir.
Android 11 veya sonraki sürümleri hedefleyen uygulamaların içerik URI'sine erişebilmesi için uygulamanızın niyeti, aşağıdaki intent işaretlerinden birini veya ikisini birden ayarlayarak URI erişim izinlerini beyan etmelidir: FLAG_GRANT_READ_URI_PERMISSION
ve FLAG_GRANT_WRITE_URI_PERMISSION
.
Android 11 ve sonraki sürümlerde URI erişim izinleri niyeti alan uygulamaya aşağıdaki özellikleri dahil edin:
- Aşağıdaki koşullara bağlı olarak içerik URI'sinin temsil ettiği verilerden okuma veya yazma verilen URI izinlerini verir.
- URI yetkilisi. İçerik sağlayıcıyı içeren uygulama farklı olabilir bu verileri kullanır.
Aşağıdaki kod snippet'inde, Android 11 veya sonraki sürümleri hedefleyen başka bir uygulamanın içerik URI'sindeki verileri görüntüleyebilmesi için URI izinleri intent işaretinin nasıl ekleneceği gösterilmektedir:
Kotlin
val shareIntent = Intent(Intent.ACTION_VIEW).apply { flags = Intent.FLAG_GRANT_READ_URI_PERMISSION data = CONTENT_URI_TO_SHARE_WITH_OTHER_APP }
Java
Intent shareIntent = new Intent(Intent.ACTION_VIEW); shareIntent.setFlags(FLAG_GRANT_READ_URI_PERMISSION); shareIntent.setData(CONTENT_URI_TO_SHARE_WITH_OTHER_APP);
Hizmetlere bağlanın
Uygulamanızın, görünür olmayan bir hizmetle etkileşimde bulunması gerekiyorsa
otomatik olarak kullanıyorsanız,
<queries>
öğesi içinde uygun intent işlemi Aşağıdaki bölümler
yaygın olarak erişilen hizmetlerin kullanımına örnekler verin.
Metin okuma motoruna bağlanın
Uygulamanız bir metin okuma (TTS) motoruyla etkileşimde bulunuyorsa aşağıdakileri ekleyin:
Manifest dosyanızdaki <queries>
öğesinin bir parçası olarak <intent>
öğesi:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent>
Konuşma tanıma hizmetine bağlanma
Uygulamanız bir konuşma tanıma hizmetiyle etkileşimde bulunuyorsa aşağıdakileri ekleyin:
Manifest dosyanızdaki <queries>
öğesinin bir parçası olarak <intent>
öğesi:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.speech.RecognitionService" /> </intent>
Medya tarayıcısı hizmetlerine bağlanın
Uygulamanız bir istemci medya tarayıcısı uygulaması ise manifest dosyanızdaki <queries>
öğesinin bir parçası olarak aşağıdaki <intent>
öğesini ekleyin:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.media.browse.MediaBrowserService" /> </intent>
Özel işlevler sağlama
Uygulamanızın özelleştirilebilir işlemler gerçekleştirmesi veya özelleştirilebilir öğeleri göstermesi gerekiyorsa
etkileşimlerine dayalı olarak e-posta gönderenlerden ibaret kullanıyorsanız, bu
amaç filtresini kullanarak özel davranış
imza
manifest dosyanızdaki <queries>
öğesinin bir parçasıdır. Aşağıdaki bölümlerde
ayrıntılı kılavuz bilgiler bulabilirsiniz.
SMS uygulamaları için sorgu
Uygulamanız,
Örneğin, cihazın varsayılan SMS işleyicisinin hangi uygulama
olduğunu kontrol etmek için
aşağıdaki <intent>
öğesini, <queries>
öğesinin bir parçası olarak dahil edin
manifest dosyanız:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.SENDTO"/> <data android:scheme="smsto" android:host="*" /> </intent>
Özel bir paylaşım sayfası oluşturun
Mümkünse sistem tarafından sağlanan
paylaşım sayfası. Alternatif olarak:
aşağıdaki <intent>
öğesini, <queries>
öğesinin bir parçası olarak dahil edin
manifest dosyanız:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.SEND" /> <!-- Replace with the MIME type that your app works with, if needed. --> <data android:mimeType="image/jpeg" /> </intent>
Uygulamanızın mantığında paylaşım sayfası oluşturma süreci (ör.
queryIntentActivities()
, diğer kriterlere kıyasla
Android 11'den önceki sürümleri kullanıyorsanız.
Özel metin seçim işlemlerini gösterme
Kullanıcılar uygulamanızda metin seçtiğinde, seçilen metinde yapılabilecek işlemler metin seçim araç çubuğunda gösterilir. Bu
Araç çubuğu diğer uygulamalardaki özel işlemleri gösterir, aşağıdakileri de ekleyin
Manifest dosyanızdaki <queries>
öğesinin bir parçası olarak <intent>
öğesi:
<!-- Place inside the <queries> element. --> <intent> <action android:name="android.intent.action.PROCESS_TEXT" /> <data android:mimeType="text/plain" /> </intent>
Bir kişiyle ilgili özel veri satırlarını gösterme
Uygulamalar özel veriler ekleyebilir satırlarını Kişiler'e ekleyin Sağlayıcı. Bir kişiler uygulamasının bu özel verileri göstermesi için şunları yapabilirsiniz:
- Diğer uygulamalardaki
contacts.xml
dosyasını okuyun. - Özel MIME türüne karşılık gelen bir simge yükleyin.
Uygulamanız bir kişiler uygulamasıysa aşağıdaki <intent>
öğelerini
manifest dosyanızdaki <queries>
öğesinin:
<!-- Place inside the <queries> element. --> <!-- Lets the app read the contacts.xml file from other apps. --> <intent> <action android:name="android.accounts.AccountAuthenticator" /> </intent> <!-- Lets the app load an icon corresponding to the custom MIME type. --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="content" android:host="com.android.contacts" android:mimeType="vnd.android.cursor.item/*" /> </intent>