2012-11-17 13 views
9

Potrzebuję otworzyć pliki z niestandardowym rozszerzeniem za pomocą mojej aplikacji. Mogę to zrobić za pomocą filtrów Intent, gdy plik znajduje się na mojej karcie SD. Mogę również wyświetlić przyciski "pobierz" i "podgląd", jeśli plik zostanie wysłany jako załącznik do Gmaila. Kiedy jednak kliknąłem przyciski pobierania/podglądu, otrzymałem wiadomość - "Niestety, nie można pobrać załącznika".Android - otwieranie załącznika do Gmaila za pomocą mojej aplikacji

Pomyślałem, że to był problem z moją aplikacją. Ale wpadłem na pomysł i zainstalowałem na telefonie aplikację "Pobierz wszystkie pliki". https://play.google.com/store/apps/details?id=com.hwkrbbt.downloadall&hl=en Następnie, po kliknięciu przycisku pobierania w Gmailu, proponuje się pobranie wszystkich plików i mojej aplikacji do pobrania. Wybrałem moją aplikację i wszystko działa dobrze !!

Czy to jakiś problem z bezpieczeństwem? Są to moim zamiarem Filtry:

<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: Tutaj jest pełny tag aktywności.

<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

Czy próbowałeś ** android: host = "Gmail-ls" **? –

Odpowiedz

9

Sam to wymyśliłem, więc zamieszczam rozwiązanie, na wypadek, gdyby ktoś inny napotkał ten dziwny problem.

Filtr zamiar wymaga obu rodzajów treści i schematu plik, przy zastosowaniu 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

Witam Niebieski, czy możesz udostępnić pełną plakietkę ? – Giuseppe

+0

Cześć Giuseppe, sprawdź moje pytanie. Dodałem zmianę. – Manju

+3

Próbowałem tego rozwiązania i działa, ale jest mylące, ponieważ 'pathPattern' zostanie zignorowany. Atrybut 'pathPattern' jest ignorowany, chyba że istnieje również atrybut' schemat' i 'host' określony dla filtru (w twojej odpowiedzi brakuje atrybutu' host'). Zobacz [dokumentacja] (http://developer.android.com/guide/topics/manifest/data-element.html) dla atrybutu 'pathPattern'. Widziałem to również w praktyce. Filtr intencji obsłuży dowolny załącznik, a nie tylko załączniki o określonym rozszerzeniu. –

Powiązane problemy