2012-11-17 15 views
9

Ho bisogno di aprire file con estensione personalizzata usando la mia app. Sono in grado di farlo usando i filtri Intent quando il file è nella mia scheda SD. Posso anche visualizzare i pulsanti "download" e "anteprima" se il file viene inviato come allegato Gmail. Tuttavia, quando ho fatto clic sui pulsanti di download/anteprima, ho ricevuto il messaggio - "Mi dispiace, non è stato possibile scaricare l'allegato".Android - Apertura dell'allegato gmail con la mia app

Ho pensato che questo fosse un problema con la mia app. Ma ho avuto un'idea casuale e ho installato l'app "Download All Files" sul mio telefono. https://play.google.com/store/apps/details?id=com.hwkrbbt.downloadall&hl=en Quindi, quando faccio clic sul pulsante di download in Gmail, vengono proposti sia il download di tutti i file che la mia app per il download del file. Ho scelto la mia app e tutto funziona bene !!

Si tratta di un problema di sicurezza? Questi sono i miei Filtri Intent:

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

EDIT: Ecco il tag piena attività.

<activity android:name=".TestApp" 
       android:label="@string/app_name" 
       android:configChanges="orientation|keyboardHidden" 
       android:launchMode="singleTask"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="com.TestApp.TestApp.NOTIFICATION" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     <!-- Opening .ate file start --> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="file" /> 
      <data android:host="*" /> 
      <data android:pathPattern=".*\\.ate" /> 
      </intent-filter> 
    <intent-filter > 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <data android:mimeType="*/*" /> 
     <data android:scheme="content" android:host="*" 
      android:pathPattern=".*\\.ate" /> 
     <data android:scheme="file" android:host="*" 
      android:pathPattern=".*\\.ate" /> 
    </intent-filter> 
    <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=".*\\.ate" android:mimeType="application/octet-stream"/> 
     <data android:scheme="content" android:pathPattern=".*\\.ate" android:mimeType="application/octet-stream"/> 
     </intent-filter> 
     <!-- Opening .ate file end --> 
    </activity> 
+0

Hai provato ** Android: host = "Gmail-ls" **? –

risposta

9

ho capito io, quindi sto postando la soluzione, in caso qualcuno incontri altrimenti questo strano problema.

Il filtro intento richiede entrambi i tipi di contenuto e schema di file, con l'applicazione mimetype/octetstream

<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"/> 

+0

Ciao Blue, puoi condividere il tag completo per favore? – Giuseppe

+0

Ciao Giuseppe, per favore controlla la mia domanda. Ho aggiunto una modifica. – Manju

+3

Ho provato questa soluzione e funziona, ma è fuorviante perché il 'pathPattern' sarà ignorato. L'attributo 'pathPattern' viene ignorato a meno che non ci sia anche un attributo' scheme' e 'host' specificato per il filtro (la tua risposta manca l'attributo' host'). Vedere la [documentazione] (http://developer.android.com/guide/topics/manifest/data-element.html) per l'attributo 'pathPattern'. Ho anche visto questo in pratica. Il filtro intent gestirà qualsiasi allegato e non solo gli allegati con l'estensione di file specificata. –

Problemi correlati