Bu konuda pek çok yanlış bilgi var, en azından Google'ın kendi belgelerinden değil. En iyisi ve garip mantık göz önüne alındığında, muhtemelen tek gerçek dokümantasyon kaynak kodudur.
Niyet filtre uygulaması neredeyse tanımı aşıyor mantığı vardır. Ayrıştırıcı kod bulmacanın diğer ilgili parçasıdır.
Aşağıdaki filtreler mantıklı davranışa oldukça yaklaşıyor. Yol modelleri, "file"
şema amaçları için geçerlidir .
Global mime türü kalıp eşleşmesi, dosya uzantısı eşleştiği sürece tüm türlerle eşleşecektir. Bu mükemmel değildir, ancak ES Dosya Gezgini gibi dosya yöneticilerinin davranışlarını eşleştirmenin tek yoludur ve URI / dosya uzantısının eşleştiği amaçlarla sınırlıdır.
"http"
Buradaki gibi başka şemaları dahil etmedim , ancak muhtemelen tüm bu filtrelerde iyi çalışacaklar.
Garip şema "content"
, bunun için uzantı filtrede mevcut değildir. Ancak sağlayıcı MIME türünüzü belirttiği sürece (Örn. Gmail, ek için MIME türünü engelsiz olarak aktaracaktır), filtre eşleşecektir.
Dikkat edilmesi gereken noktalar:
- Filtrelerde hiçbir şeyin tutarlı davranmadığını, özel durumların bir labirenti olduğunu ve en az sürpriz ilkesinin ihlalini bir tasarım hedefi olarak ele aldığını unutmayın. Model eşleştirme algoritmalarının hiçbiri aynı sözdizimini veya davranışı izlemez. Alanın olmaması bazen bir joker karakterdir ve bazen değildir. Bir veri öğesi içindeki öznitelikler bazen birlikte hareket etmeli ve bazen gruplamayı yok saymalıdır. Gerçekten daha iyi yapılabilirdi.
scheme
VE host
yönelik belirtilmelidir path
kurallar (şu anda, Google'ın API kılavuzuna aykırı) eşleşecek.
- En azından ES Dosya Gezgini, MIME türünden
""
çok farklı bir şekilde filtrelenen null
, açıkça eşleşmesi imkansız olan ve yalnızca riskli "*/*"
filtre ile eşleştirilebilen amaç üretir .
"*/*"
Filtre ile Amaçları maç ETMEYECEKTIR null
hiç yok MIME türüyle bu özel durum için ayrı bir süzgeç gerektirir - MIME türü.
"content"
Orijinal dosya adı (en azından Gmail ile) niyet mevcut değildir çünkü düzeni yalnızca MIME türüne göre eşleştirilebilir.
- Özniteliklerin ayrı
"data"
öğelerdeki gruplandırılması , yorumla (neredeyse) ilgisizdir, özel istisnası host
ve port
- bunlar birlikte eşleşir. Diğer her şeyin bir "data"
öğe içinde veya "data"
öğeler arasında belirli bir ilişkisi yoktur .
Tüm bunlar göz önünde bulundurularak, burada yorum içeren bir örnek verilmiştir:
<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>