- sintaksis:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- terdapat dalam:
-
<intent-filter> - dapat berisi:
-
<data> - deskripsi:
-
Membuat aturan pencocokan
Intentyang presisi yang dapat menyertakan parameter kueri URI dan fragmen URI. Aturan dapat berupa aturan penyertaan (izinkan) atau pengecualian (pemblokiran), bergantung pada atributandroid:allow. Aturan pencocokan ditentukan oleh atributpath*,fragment*, danquery*dari elemen<data>yang disertakan.Pencocokan
Untuk mencocokkan URI, setiap bagian dari grup filter relatif URI harus cocok dengan bagian URI. Mungkin ada bagian URI yang tidak ditentukan dalam grup filter relatif URI. Contoh:
<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>
Filter cocok dengan
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3karena semua yang ditentukan oleh grup filter relatif URI ada. Filter juga cocok denganhttps://project.example.com/any/path/here?param2=value2¶m1=value1karena urutan parameter kueri tidak berpengaruh. Namun, filter tidak cocok denganhttps://project.example.com/any/path/here?param1=value1, yang tidak memilikiparam2=value2.OR dan AND
Tag
<data>di luar<uri-relative-filter-group>di-OR-kan, sedangkan tag<data>di dalam<uri-relative-filter-group>di-AND-kan.Perhatikan contoh berikut:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> ... </intent-filter>
Filter ini cocok dengan jalur yang dimulai dengan
/prefixATAU diakhiri dengansuffix.Sebaliknya, contoh berikutnya mencocokkan jalur yang dimulai dengan
/prefixDAN berakhir dengansuffix:<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>
Akibatnya, beberapa atribut
pathdalam<uri-relative-filter-group>yang sama tidak cocok dengan apa pun:<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>
Urutan deklarasi
Perhatikan contoh berikut:
<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>
Filter cocok dengan fragmen
#fragmentkarena kecocokan ditemukan sebelum aturan pengecualian dievaluasi, tetapi fragmen seperti#fragment123tidak cocok.Tag saudara
<uri-relative-filter-group>tag bekerja bersama dengan tag<data>saudaranya (yaitu, tag<data>yang berada di luar<uri-relative-filter-group>, tetapi di dalam<intent-filter>yang sama). Tag<uri-relative-filter-group>harus memiliki tag<data>saudaranya agar berfungsi dengan baik karena atribut URI saling bergantung di tingkat<intent-filter>:- Jika
schemetidak ditentukan untuk filter intent, semua atribut URI lainnya akan diabaikan. - Jika
hosttidak ditentukan untuk filter, atributportdan semua atributpath*akan diabaikan.
Turunan
<data>dari<intent-filter>dievaluasi sebelum tag<uri-relative-filter-group>. Kemudian, tag<uri-relative-filter-group>dievaluasi secara berurutan, misalnya:<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>
Filter menerima
https://project.example.com/path?querykarena cocok dengan<data android:path="/path" />, yang berada di luar aturan pengecualian<uri-relative-filter-group>.Kasus penggunaan umum
Bayangkan Anda memiliki URI
https://project.example.com/path, yang ingin Anda cocokkan denganIntentbergantung pada keberadaan atau nilai parameter kueri. Untuk membuat filter intent yang cocok denganhttps://project.example.com/pathdan memblokirhttps://project.example.com/path?query, Anda dapat mencoba sesuatu seperti:<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>
Faktanya, cara ini tidak berhasil. URI
https://project.example.com/path?querycocok dengan jalur/path, dan tag<uri-relative-filter-group>memungkinkan bagian ekstra saat cocok.Revisi filter intent sebagai berikut:
<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>
Filter ini berfungsi karena aturan pemblokiran yang melarang parameter kueri tidak kosong dievaluasi terlebih dahulu.
Untuk menyederhanakan kode, balikkan perilaku untuk mengizinkan parameter kueri dan memblokir URI tanpa parameter kueri:
<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>
Karakter yang dienkode URI
Untuk mencocokkan URI yang berisi karakter yang dienkode dengan URI, tulis karakter mentah yang tidak dienkode dalam filter, misalnya:
<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>
Filter cocok dengan
?param=value!dan?param=value%21.Namun, jika Anda menulis karakter yang dienkode dalam filter sebagai berikut:
<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>
Filter tidak cocok dengan
?param=value!maupun?param=value%21.Jumlah elemen
Anda dapat menempatkan sejumlah elemen
<uri-relative-filter-group>di dalam<intent-filter>.Referensi lainnya
Untuk mengetahui informasi cara kerja filter intent, termasuk aturan cara objek intent dicocokkan dengan filter, lihat Intent dan Filter Intent serta Filter Intent.
Untuk mengetahui informasi tentang
<uri-relative-filter-group>, lihatUriRelativeFilterGroupdanUriRelativeFilter. - Jika
- atribut:
-
android:allow-
Apakah grup filter relatif URI ini merupakan aturan penyertaan (izinkan) dan bukan
aturan pengecualian (pemblokiran). Nilai defaultnya adalah
"true".Nilai Deskripsi "true"(default)Jika grup filter relatif URI cocok, filter intent cocok "false"Jika grup filter relatif URI cocok, filter intent tidak cocok
- diperkenalkan di:
- Level API 35
- lihat juga:
-
<intent-filter><data>
<uri-relative-filter-group>
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2026-04-21 UTC.
[null,null,["Terakhir diperbarui pada 2026-04-21 UTC."],[],[]]