2011-06-10 10 views
6

मैं वर्तमान में एक एंड्रॉइड एप्लिकेशन पर काम करता हूं जो कस्टम एक्सटेंशन के साथ फाइल पढ़ता है। अनिवार्य विशेषताओं में से एक यह है कि ऐप को जीमेल द्वारा प्रस्तावित किया जाना चाहिए जब उपयोगकर्ता संलग्नक .ourextension के साथ मेल प्राप्त करता है।जीमेल अटैचमेंट और कस्टम एक्सटेंशन

मैंने कुछ शोध किया, और पाया कि एंड्रॉइड पर जीमेल क्लाइंट एक्सटेंशन पर भरोसा नहीं करता है, क्योंकि लॉन्च किए गए इरादे के डेटा में प्रस्तावित फ़ाइल में कोई एक्सटेंशन नहीं है। यह केवल मेल क्लाइंट द्वारा दिए गए माइम-प्रकार पर भरोसा करता है।

समस्या यह है कि मेल क्लाइंट के बीच हमारी कस्टम फ़ाइल का पता नहीं लगाया जाता है। उदाहरण के लिए, यदि मैं अपने कस्टम फ़ाइल जीमेल वेबपृष्ठ के साथ खुद को भेजता हूं, तो माइम-प्रकार को एप्लिकेशन/ऑक्टेट-स्ट्रीम के रूप में पहचाना जाता है। अगर मेरा एक दोस्त सेब मेल डेस्कटॉप सॉफ़्टवेयर के साथ भेजता है, तो इसे टेक्स्ट/एक्सएमएल (जो अच्छा होगा) के रूप में पहचाना जाता है। और एक और मेल क्लाइंट, इवोल्यूशन पर, माइम-टाइप टेक्स्ट/सादा है ...

हमारा एप्लिकेशन उन सभी प्रकारों को संभाल नहीं सकता है! अन्यथा, यह हर प्रकार के अनुलग्नक के लिए प्रस्तावित किया जाएगा ...

क्या इसके लिए कोई समाधान है?

उत्तर

0

संपादित करें: यह उत्तर 3 साल पुराना है। मेरे पास दूसरे के उत्तरों का परीक्षण करने का समय नहीं था, लेकिन मेरा स्पष्ट रूप से पुराना है इसलिए कृपया इस विषय के अन्य उत्तरों की तलाश करें!

मुझे कोई समाधान नहीं मिला, काम करने का एकमात्र तरीका माइम-प्रकार के साथ है, इसलिए आपको अपने अनुलग्नक के लिए एक ज्ञात माइम-प्रकार के साथ पहचानने के लिए प्रार्थना करनी चाहिए, और इसे संभालना चाहिए। इसका मतलब यह है कि यदि आप फ़ाइल को उदाहरण के लिए एचटीएमएल के रूप में पहचानते हैं तो आप अन्य एप्लिकेशन के साथ हस्तक्षेप करेंगे।

आपको इस मामले को संभालने की आवश्यकता है कि फ़ाइल आपके एप्लिकेशन द्वारा पठनीय नहीं है और उपयोगकर्ता को सूचित करने के लिए पॉपअप दिखाएं कि आप फ़ाइल नहीं पढ़ सकते हैं।

हो सकता है कि एक या दो साल में, जीमेल एक अच्छा एपीआई प्रदान करेगा ...

वैसे, पिछले जीमेल संस्करण एक डाउनलोड बटन है कि आप दुर्घटनाओं से बचने के लिए संभाल चाहिए जोड़ने के लिए, यह एक नया बनाकर काम करता है यूरी के साथ फाइल करें।

0

तुम अब भी जीमेल

<intent-filter> 
<action android:name="android.intent.action.VIEW" /> 
<category android:name="android.intent.category.DEFAULT" /> 
<data android:mimeType="application/*" host="*" android:pathPattern=".*\\.mht" android:scheme="content" /> 
</intent-filter> 

के लिए विस्तार से मिलान कर सकते माइम प्रकार के लिए परिवर्तन करें / होने के लिए और itll केवल विस्तार पर से मेल

+0

क्षमा करें, मैंने पहले आपका जवाब नहीं देखा, अगर यह काम करता है तो मैं एप की कोशिश करूंगा, और अगर यह करता है तो मेरा जवाब संपादित करें। – NitroG42

+0

क्षमा करें, लेकिन यह काम नहीं करता है, जीमेल केवल इरादे के लिए माइम प्रकार का उपयोग करता है। – NitroG42

+0

मेरे लिए काम करता है। मेरे पास एक डाउनलोड और पूर्वावलोकन बटन है। एक स्टॉक गैलेक्सी एस फोन और एक गैलेक्सी एस II टैबलेट पर परीक्षण किया। –

2

यह इस जीमेल से काम करने के लिए पाने के लिए संभव है, हालांकि यह मुझे सभी मुद्दों को समझने के लिए प्रयास करने के दिन ले रहा है।

महत्वपूर्ण आशय डाटा

act=android.intent.action.VIEW 
dat=file:///mnt/sdcard/Download/Availability Focus.inform 
typ=application/octet-stream 
flg=0x80001 cmp=air.com.extension/.AppEntry 

आशय फ़िल्टर है कि यह कब्जा करने में सक्षम था (नीचे कुछ नोट)

<intent-filter> 
    <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" android:pathPattern=".*\\.inform" android:mimeType="application/octet-stream"/> 
    <data android:scheme="content" android:pathPattern=".*\\.inform" android:mimeType="application/octet-stream"/> 
    </intent-filter> 

दोनों सामग्री और फ़ाइल योजना के लिए आवश्यक हैं। सामग्री योजना के बिना जीमेल आपके फ़िल्टर को सभी को अनदेखा कर देगा। यह एक बग की तरह लगता है। FILE योजना के बिना जीमेल एक त्रुटि फेंक देगा कि यह नहीं जानता कि इरादे से कौन सा एप्लिकेशन लॉन्च करना है।

07-19 15:38:19.160: ERROR/Gmail(2220): Coun't find Activity for intent 

दोनों योजनाओं के साथ आवेदन को डाउनलोड और पूर्वावलोकन दोनों फ़ाइलों के लिए मंशा प्राप्त होता है। उन्हें अलग-अलग संभालना होगा।

+0

मैंने अभी इसका परीक्षण किया है, और यह एंड्रॉइड 4.0.3 पर चल रहे जीमेल 4.1.2 के लिए काम करता है। लेकिन जब मैं एंड्रॉइड 2.3.6 पर जीमेल 2.3.6 के साथ एक ही ईमेल खोलता हूं, तो मेरे पास अटैचमेंट खोलने का विकल्प भी नहीं है। –

+0

एंड्रॉइड 4.2 पर चल रहे जीमेल 4.2.1 के साथ परीक्षण किया गया। अच्छा काम करता है। धन्यवाद। – Medo

+3

इसका परीक्षण करते समय, सुनिश्चित करें कि आप एक अलग एक्सटेंशन के साथ अनुलग्नक खोलने का भी प्रयास करें, जिसमें पहले से कोई एसोसिएशन नहीं है। आप पाएंगे कि आपका 'इरादा-फ़िल्टर' भी इससे मेल खाता है। कारण, मुझे लगता है कि आपके पास 'होस्ट' विशेषता नहीं है, और इसके बिना 'pathPattern' को अनदेखा किया गया है (developer.android.com/guide/topics/manifest/data-element.html)। यदि आप 'एंड्रॉइड: होस्ट = "*" 'जोड़ते हैं तो आपका' इरादा-फ़िल्टर 'अचानक मेल नहीं खाएगा। समस्या यह प्रतीत होती है कि 'सामग्री: //' यूआरआई में फ़ाइल नाम नहीं है (developer.android.com/reference/android/content/ContentUris.html)। –

3

समाधान जीमेल < 4.2 के साथ परीक्षण किया कस्टम एक्सटेंशन, Gmail 4.2, Google डिस्क और फ़ाइल ब्राउज़र के साथ फ़ाइल खोलने के लिए

कोड भेजने के लिए फ़ाइल:

sendIntent.setType("application/calc1"); 

आशय फिल्टर:

  <!-- Filter to open file with gmail version < 4.2 --> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="application/calc1" /> 
      <data android:pathPattern=".*\\.calc1" /> 
      <data android:host="*" /> 
     </intent-filter> 

     <!-- Filter to open with file browser or google drive --> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:scheme="file" /> 
      <data android:mimeType="*/*" /> 
      <data android:pathPattern=".*\\.calc1" /> 
      <data android:host="*" /> 
     </intent-filter> 

     <!-- Filter to open file with gmail version 4.2 --> 
     <!-- Save file first with "save" button otherwise gmail crashes --> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="application/octet-stream" /> 
      <data android:pathPattern=".*\\.calc1" /> 
      <data android:host="*" /> 
     </intent-filter> 
संबंधित मुद्दे