Ada banyak informasi yang salah tentang topik ini, paling tidak dari dokumentasi Google sendiri. Yang terbaik, dan mengingat logika yang aneh, mungkin satu-satunya dokumentasi nyata adalah kode sumbernya.
The pelaksanaan maksud filter memiliki logika yang hampir menentang deskripsi. The kode parser adalah bagian terkait lainnya dari teka-teki.
Filter berikut sangat mirip dengan perilaku yang masuk akal. Pola jalur berlaku, untuk "file"
maksud skema.
Pencocokan pola jenis pantomim global akan cocok dengan semua jenis selama ekstensi file cocok. Ini tidak sempurna, tetapi satu-satunya cara untuk mencocokkan perilaku pengelola file seperti ES File Explorer, dan ini terbatas pada maksud yang cocok dengan URI / ekstensi file.
Saya belum menyertakan skema lain seperti di "http"
sini, tetapi mereka mungkin akan berfungsi dengan baik pada semua filter ini.
Skema ganjil adalah "content"
, yang ekstensi tidak tersedia untuk filter. Namun selama penyedia menyatakan jenis MIME Anda (Misalnya, Gmail akan meneruskan jenis MIME untuk lampiran tanpa hambatan), filter akan cocok.
Harus diperhatikan:
- Ketahuilah bahwa tidak ada yang berperilaku secara konsisten di filter, ini adalah labirin kasus khusus, dan menganggap pelanggaran prinsip paling tidak mengejutkan sebagai tujuan desain. Tak satu pun dari algoritme pencocokan pola mengikuti sintaks atau perilaku yang sama. Tidak adanya bidang terkadang merupakan karakter pengganti dan terkadang tidak. Atribut dalam elemen data terkadang harus digabungkan dan terkadang mengabaikan pengelompokan. Itu benar-benar bisa dilakukan dengan lebih baik.
- The
scheme
DAN host
harus ditentukan untuk path
aturan untuk mencocokkan (bertentangan dengan panduan API Google, saat ini).
- Setidaknya ES File Explorer menghasilkan maksud dengan tipe MIME
""
, yang difilter dengan sangat berbeda null
, tidak mungkin dicocokkan secara eksplisit, dan hanya dapat dicocokkan oleh "*/*"
filter berisiko .
- The
"*/*"
Filter TIDAK akan cocok Niat dengan null
tipe MIME - yang membutuhkan filter terpisah untuk kasus khusus ini tanpa tipe MIME sama sekali.
- The
"content"
Skema hanya bisa ditandingi oleh tipe MIME, karena nama file asli tidak tersedia di maksud (setidaknya dengan Gmail).
- Pengelompokan atribut dalam
"data"
elemen terpisah (hampir) tidak relevan dengan interpretasi, dengan pengecualian khusus dari host
dan port
- yang berpasangan bersama. Segala sesuatu yang lain tidak memiliki asosiasi khusus dalam suatu "data"
elemen atau antar "data"
elemen.
Dengan mengingat semua ini, berikut adalah contoh dengan komentar:
<intent-filter
android:icon="@drawable/icon"
android:label="@string/app_name"
android:priority="50" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />
<data android:scheme="content" />
<data android:mimeType="application/vnd.my-type" />
</intent-filter>
<intent-filter
android:icon="@drawable/icon"
android:label="@string/app_name"
android:priority="50" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />
<data android:host="*" />
<data android:pathPattern=".*\\.my-ext" />
<data android:pathPattern=".*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.my-ext" />
</intent-filter>
<intent-filter
android:icon="@drawable/icon"
android:label="@string/app_name"
android:priority="50" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />
<data android:host="*" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.my-ext" />
<data android:pathPattern=".*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.my-ext" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.my-ext" />
</intent-filter>