- söz dizimi:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- Şunlarda bulunur:
-
<intent-filter>
- Şunları içerebilir:
-
<data>
- description:
-
URI sorgu parametreleri ve URI parçaları içerebilecek hassas
Intent
eşleme 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ı, dahil edilen<data>
öğelerininpath*
,fragment*
vequery*
özellikleri tarafından belirtilir.Eşleşme
Bir URI ile eşleşmek için URI'ye göre filtre grubunun her bir bölümünün URI'nin bir kısmıyla eşleşmesi gerekir. URI'nin, URI'ye göre filtre grubunda belirtilmeyen bölümleri olabilir. Örnek:
<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öreli filtre grubu tarafından belirtilen her şey mevcut olduğu için filtre,
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3
ile eşleşir. Sorgu parametrelerinin sırası önemli olmadığı için filtre,https://project.example.com/any/path/here?param2=value2¶m1=value1
ile de eşleşir. Ancak filtre,param2=value2
eksik olanhttps://project.example.com/any/path/here?param1=value1
ile eşleşmiyor.VEYA ve VE
<uri-relative-filter-group>
dışındaki<data>
etiketleri 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,
/prefix
ile başlayan VEYAsuffix
ile biten yollarla eşleşir.Buna karşılık, aşağıdaki örnek
/prefix
ile başlayan VEsuffix
ile biten yollarla eşleşir:<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>
alanındaki 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>
Beyan 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>
Hariç tutma kuralı değerlendirilmeden önce bir eşleşme bulunduğu için filtre,
#fragment
fragmanıyla eşleşir ancak#fragment123
gibi fragmanlar 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 bulunan<data>
etiketleri). URI özellikleri<intent-filter>
düzeyinde birbirine bağlı olduğundan<uri-relative-filter-group>
etiketlerinin düzgün çalışması için kardeş<data>
etiketleri olmalıdır:- Intent filtresi için bir
scheme
belirtilmezse diğer tüm URI özellikleri yoksayılır. - Filtre için bir
host
belirtilmezseport
özelliği ve tümpath*
özellikleri yok sayılır.
Bir
<intent-filter>
'un<data>
alt hesapları, tüm<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,
<uri-relative-filter-group>
hariç tutma kuralının dışındaki<data android:path="/path" />
ile eşleştiği içinhttps://project.example.com/path?query
değerini kabul eder.Yaygın kullanım alanı
Bir sorgu parametresinin varlığına veya değerine bağlı olarak
https://project.example.com/path
URI'niz olduğunu ve bu URI'yiIntent
ile eşleştirmek istediğinizi varsayalım.https://project.example.com/path
ile eşleşen vehttps://project.example.com/path?query
'u engelleyen bir intent filtresi oluşturmak için aşağıdaki gibi bir ifadeyi 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 aslında işe yaramaz.
https://project.example.com/path?query
URI'si,/path
yolunu eşleştirir ve<uri-relative-filter-group>
etiketi, eşleşirken ek parçalara izin verir.Intent filtresini aşağıdaki şekilde 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ının önce değerlendirilmesi nedeniyle çalışır.
Kodu basitleştirmek için davranışı, sorgu parametrelerine izin verecek ve sorgu parametresi olmayan URI'leri engelleyecek şekilde değiştirin:
<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 kodlamalı karakterler
URI kodlamalı karakterler içeren URI'leri eşleştirmek 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%21
ile 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,
?param=value!
veya?param=value%21
ile eşleşmiyor.Öğe sayısı
Bir
<intent-filter>
içine dilediğiniz sayıda<uri-relative-filter-group>
öğesi yerleştirebilirsiniz.Ek kaynaklar
Intent nesnelerinin filtrelerle eşleşme kuralları da dahil olmak üzere intent filtrelerinin işleyiş şekli hakkında bilgi edinmek için Intent'ler ve Intent Filtreleri ile Intent Filtreleri başlıklı makaleleri inceleyin.
<uri-relative-filter-group>
hakkında bilgi edinmek içinUriRelativeFilterGroup
veUriRelativeFilter
başlıklı makaleleri inceleyin. - Intent filtresi için bir
- özellikleri:
-
android:allow
-
Bu URI'ye göreli filtre grubunun, hariç tutma (engelleme) kuralı yerine dahil etme (izin verme) kuralı olup olmadığı. Varsayılan değer:
"true"
.Değer Açıklama "true"
(varsayılan)URI'ye göre filtre grubu eşleşirse intent filtresi de eşleşir "false"
URI'ye göreli filtre grubu eşleşirse intent filtresi eşleşmez
- Tanıtıldığı sürüm:
- API düzeyi 35
- Ayrıca:
-
<intent-filter>
<data>
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: 2024-12-02 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2024-12-02 UTC."],[],[]]