- söz dizimi:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- içerdiği:
-
<intent-filter> - Şunları içerebilir:
-
<data> - description:
-
URI sorgu parametrelerini ve URI parçalarını içerebilen hassas
Intenteşleşme kuralları oluşturur. Kurallar,android:allowözelliğine bağlı olarak dahil etme (izin verme) veya hariç tutma (engelleme) kuralları olabilir. Eşleştirme kuralları, kapsanan<data>öğelerininpath*,fragment*vequery*özellikleri tarafından belirtilir.Eşleştirme
Bir URI'nin eşleşmesi için URI'ye göre her filtre grubu bölümü, URI'nin bir bölümüyle eşleşmelidir. URI'nin, URI'ye göre filtre grubunda belirtilmeyen kısımları olabilir. Örneğin:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:query="param1=value1" /> <data android:query="param2=value2" /> </uri-relative-filter-group> ... </intent-filter>
URI'ye göre filtre grubu tarafından belirtilen her şey mevcut olduğundan filtre eşleşir.
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3Sorgu parametrelerinin sırası önemli olmadığı için filtre,https://project.example.com/any/path/here?param2=value2¶m1=value1ile de eşleşir. Ancak filtre,https://project.example.com/any/path/here?param1=value1ile eşleşmiyor.https://project.example.com/any/path/here?param1=value1,param2=value2eksik.OR ve AND
<data>etiketleri<uri-relative-filter-group>dışında OR işlemine tabi tutulurken<uri-relative-filter-group>içindeki<data>etiketleri AND işlemine tabi tutulur.Aşağıdaki örneği inceleyin:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> ... </intent-filter>
Filtre,
/prefixile başlayan VEYAsuffixile biten yollarla eşleşir.Buna karşılık, sonraki örnekte
/prefixile başlayıpsuffixile biten yollar eşleştirilir:<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> </uri-relative-filter-group> ... </intent-filter>
Sonuç olarak, aynı
<uri-relative-filter-group>içindeki birden fazlapathözelliği hiçbir şeyle eşleşmez:<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group> <data android:path="/path1" /> <data android:path="/path2" /> </uri-relative-filter-group> ... </intent-filter>
Bildirim sırası
Aşağıdaki örneği inceleyin:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group> <data android:fragment="fragment" /> </uri-relative-filter-group> <uri-relative-filter-group android:allow="false"> <data android:fragmentPrefix="fragment" /> </uri-relative-filter-group> ... </intent-filter>
Filtre, hariç tutma kuralı değerlendirilmeden önce bir eşleşme bulunduğu için
#fragmentparçasıyla eşleşir ancak#fragment123gibi parçalar eşleşmez.Kardeş etiketler
<uri-relative-filter-group>etiketleri, kardeş<data>etiketleriyle birlikte çalışır (yani<uri-relative-filter-group>dışında ancak aynı<intent-filter>içinde olan<data>etiketleri).<uri-relative-filter-group>etiketlerinin düzgün çalışması için kardeş<data>etiketleri olmalıdır. Bunun nedeni, URI özelliklerinin<intent-filter>düzeyinde karşılıklı olarak bağımlı olmasıdır:- Intent filtresi için
schemebelirtilmemişse diğer tüm URI özellikleri yoksayılır. - Filtre için bir
hostbelirtilmemişseportözelliği ve tümpath*özellikleri yoksayılır.
Bir
<intent-filter>öğesinin<data>alt öğeleri,<uri-relative-filter-group>etiketlerinden önce değerlendirilir. Ardından<uri-relative-filter-group>etiketleri sırayla değerlendirilir. Örneğin:<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="false"> <data android:path="/path" /> <data android:query="query" /> </uri-relative-filter-group> <data android:path="/path" /> ... </intent-filter>
Filtre,
https://project.example.com/path?querydeğerini kabul eder. Çünkü bu değer,<uri-relative-filter-group>hariç tutma kuralının dışında olan<data android:path="/path" />ile eşleşir.Yaygın kullanım alanı
Sorgu parametresinin varlığına veya değerine bağlı olarak
https://project.example.com/pathURI'siniIntentile eşleştirmek istediğinizi varsayalım.https://project.example.com/pathile eşleşen vehttps://project.example.com/path?queryöğesini engelleyen bir intent filtresi oluşturmak için şuna benzer bir şey deneyebilirsiniz:<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:path="/path" /> </uri-relative-filter-group> ... </intent-filter>
Bu yöntem aslında işe yaramaz.
https://project.example.com/path?queryURI'si/pathyoluyla eşleşir ve<uri-relative-filter-group>etiketi eşleşme sırasında ekstra parçalara izin verir.Intent filtresini aşağıdaki gibi düzeltin:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="false"> <data android:path="/path" /> <data android:queryAdvancedPattern=".+" /> </uri-relative-filter-group> <uri-relative-filter-group android:allow="true"> <data android:path="/path" /> </uri-relative-filter-group> ... </intent-filter>
Bu filtre, boş olmayan sorgu parametrelerini yasaklayan engelleme kuralları önce değerlendirildiği için çalışır.
Kodu basitleştirmek için davranışı tersine çevirerek sorgu parametrelerine izin verin ve sorgu parametresi içermeyen URI'leri engelleyin:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:path="/path" /> <data android:queryAdvancedPattern=".+" /> </uri-relative-filter-group> ... </intent-filter>
URI kodlu karakterler
URI kodlu karakterler içeren URI'lerle eşleşmek için filtreye ham, kodlanmamış karakterleri yazın. Örneğin:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:query="param=value!" /> </uri-relative-filter-group> ... </intent-filter>
Filtre,
?param=value!ve?param=value%21ile eşleşiyor.Ancak, filtreye kodlanmış karakterleri aşağıdaki gibi yazarsanız:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:query="param=value%21" /> </uri-relative-filter-group> ... </intent-filter>
Filtre ne
?param=value!ile ne de?param=value%21ile eşleşiyor.Öğe sayısı
<uri-relative-filter-group>öğelerinden istediğiniz kadarını<intent-filter>içine yerleştirebilirsiniz.Ek kaynaklar
Intent filtrelerinin işleyiş şekliyle ilgili bilgi edinmek için (ör. intent nesnelerinin filtrelere göre nasıl eşleştirileceğiyle ilgili kurallar) Intent'ler ve Intent Filtreleri ile Intent Filtreleri başlıklı makaleleri inceleyin.
<uri-relative-filter-group>hakkında bilgi edinmek içinUriRelativeFilterGroupveUriRelativeFiltersayfalarını inceleyin. - Intent filtresi için
- özellikleri:
-
android:allow-
Bu URI'ye göre filtre grubunun hariç tutma (engelleme) kuralı yerine dahil etme (izin verme) kuralı olup olmadığı. Varsayılan değer
"true"'dır.Değer Açıklama "true"(varsayılan)URI göreli filtre grubu eşleşirse intent filtresi eşleşir. "false"URI göreli filtre grubu eşleşirse intent filtresi eşleşmez.
- Tanıtıldığı oyun:
- API düzeyi 35
- Ayrıca:
-
<intent-filter><data>
<uri-relative-filter-group>
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2026-04-21 UTC.
[null,null,["Son güncelleme tarihi: 2026-04-21 UTC."],[],[]]