इस विषय पर बहुत सी गलत जानकारी है, कम से कम Google के स्वयं के प्रलेखन से नहीं। सबसे अच्छा, और अजीब तर्क दिया, संभवतः एकमात्र वास्तविक दस्तावेज स्रोत कोड है।
लक्ष्य फ़िल्टर कार्यान्वयन तर्क है कि लगभग वर्णन खारिज कर देता है। पार्सर कोड पहेली के अन्य प्रासंगिक टुकड़ा है।
निम्नलिखित फ़िल्टर समझदार व्यवहार के बहुत करीब आते हैं। "फ़ाइल" योजना के लिए पथ पैटर्न लागू होते हैं।
वैश्विक माइम प्रकार का पैटर्न मैच सभी प्रकारों से मेल खाएगा जब तक कि फाइल एक्सटेंशन मैच न हो जाए। यह सही नहीं है, लेकिन ES फ़ाइल एक्सप्लोरर जैसे फ़ाइल प्रबंधकों के व्यवहार से मेल खाने का एकमात्र तरीका है, और यह उन इरादों तक सीमित है जहां URI / फ़ाइल एक्सटेंशन मैच करते हैं।
मैंने यहां "http" जैसी अन्य योजनाओं को शामिल नहीं किया है, लेकिन वे शायद इन सभी फिल्टर पर ठीक काम करेंगे।
विषम योजना "सामग्री" है, जिसके लिए फ़िल्टर को एक्सटेंशन उपलब्ध नहीं है। लेकिन जब तक प्रदाता बताता है कि आपका MIME प्रकार (उदा। जीमेल लगाव के लिए MIME प्रकार पर पास हो जाएगा), फ़िल्टर का मिलान होगा।
के बारे में पता होना चाहिए:
- इस बात से अवगत रहें कि कुछ भी फ़िल्टर में लगातार व्यवहार नहीं करता है, यह एक स्पेकल केस है, और डिजाइन लक्ष्य के रूप में कम से कम आश्चर्य के सिद्धांत का उल्लंघन करता है। कोई भी पैटर्न मिलान एल्गोरिदम एक ही वाक्यविन्यास या व्यवहार का पालन नहीं करता है। एक क्षेत्र की अनुपस्थिति कभी-कभी एक वाइल्डकार्ड है और कभी-कभी नहीं होती है। एक डेटा तत्व के भीतर गुण कभी-कभी एक साथ चलते हैं और कभी-कभी समूहन को अनदेखा करते हैं। यह वास्तव में बेहतर किया जा सकता था।
- योजना और होस्ट को मिलान करने के लिए पथ नियमों के लिए निर्दिष्ट किया जाना चाहिए (वर्तमान में Google के एपीआई गाइड के विपरीत)।
- कम से कम ES फ़ाइल एक्सप्लोरर "MIME प्रकार" के साथ इंटेंस उत्पन्न करता है, जिसे बहुत अलग तरीके से नल करने के लिए फ़िल्टर किया गया है, स्पष्ट रूप से मेल खाना असंभव है, और केवल जोखिम भरे "* / *" फ़िल्टर द्वारा मिलान किया जा सकता है।
- "* / *" फिल्टर एक अशक्त MIME प्रकार के साथ इरादों से मेल नहीं खाएगा - जिसके लिए इस विशिष्ट मामले के लिए एक अलग फिल्टर की आवश्यकता है जिसमें MIME प्रकार नहीं है।
- "सामग्री" योजना केवल MIME प्रकार से मेल खा सकती है, क्योंकि मूल फ़ाइल नाम इरादे में उपलब्ध नहीं है (कम से कम जीमेल के साथ)।
- अलग-अलग "डेटा" तत्वों में विशेषताओं का समूहन (लगभग) व्याख्या के लिए अप्रासंगिक है, मेजबान और बंदरगाह के विशिष्ट अपवाद के साथ - जो एक साथ जोड़ी बनाते हैं। बाकी सब कुछ "डेटा" तत्व के भीतर या "डेटा" तत्वों के बीच कोई विशिष्ट संबंध नहीं है।
इस सब को ध्यान में रखते हुए, यहाँ टिप्पणियों के साथ एक उदाहरण दिया गया है:
<!--
Capture content by MIME type, which is how Gmail broadcasts
attachment open requests. pathPattern and file extensions
are ignored, so the MIME type *MUST* be explicit, otherwise
we will match absolutely every file opened.
-->
<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>
<!--
Capture file open requests (pathPattern is honoured) where no
MIME type is provided in the Intent. An Intent with a null
MIME type will never be matched by a filter with a set MIME
type, so we need a second intent-filter if we wish to also
match files with this extension and a non-null MIME type
(even if it is non-null but zero length).
-->
<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="*" />
<!--
Work around Android's ugly primitive PatternMatcher
implementation that can't cope with finding a . early in
the path unless it's explicitly matched.
-->
<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>
<!--
Capture file open requests (pathPattern is honoured) where a
(possibly blank) MIME type is provided in the Intent. This
filter may only be necessary for supporting ES File Explorer,
which has the probably buggy behaviour of using an Intent
with a MIME type that is set but zero-length. It's
impossible to match such a type except by using a global
wildcard.
-->
<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="*/*" />
<!--
Work around Android's ugly primitive PatternMatcher
implementation that can't cope with finding a . early in
the path unless it's explicitly matched.
-->
<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>