2013-01-10 54 views
1

我想註冊一個新的文件擴展名(.db_backup),以便與此擴展與我的應用程序打開的所有文件。關聯的新文件,Android應用

基本上,這類型的文件備份到電子郵件作爲附件。在打開附件時,我希望所有這種類型的文件都可以直接用我的應用程序打開。

我成功地通過提了Android這樣做:mime類型=應用程序/ *

但現在我的應用也開放所有的應用程序(PDF,APK)(這是顯而易見的,因爲*被提及)。請告訴我什麼android:mimeType我應該在清單中提到?我給出了AndroidManifest.xml文件:

<activity 
     android:name="com.package.RestoreFromMail" 
     android:configChanges="keyboardHidden|orientation" 
     android:label="@string/restore_mail" > 
     <intent-filter android:priority="1" > 
      <category android:name="android.intent.category.DEFAULT" > 
      </category> 

      <action android:name="android.intent.action.VIEW" > 
      </action> 

      <data 
       android:host="*" 
       android:pathPattern=".*\\.db_backup" 
       android:scheme="http" > 
      </data> 
     </intent-filter> 
     <intent-filter android:priority="1" > 
      <category android:name="android.intent.category.DEFAULT" > 
      </category> 

      <action android:name="android.intent.action.VIEW" > 
      </action> 

      <data 
       android:host="*" 
       android:pathPattern=".*\\.db_backup" 
       android:scheme="file" > 
      </data> 
     </intent-filter> 
     <intent-filter android:priority="1" > 
      <category android:name="android.intent.category.DEFAULT" > 
      </category> 

      <action android:name="android.intent.action.VIEW" > 
      </action> 

      <data 
       android:host="*" 
       android:mimeType="application/*" > 
      </data> 
     </intent-filter> 
    </activity> 
+0

你解決這個問題?它是你的最後一個意圖過濾器,沒有將它與一切聯繫起來的方案。一直試圖讓自己工作。問題是沒有這個協會不從郵件和谷歌驅動器工作。我試着添加android:pathPattern,但似乎忽略它。 –

+0

是的,刪除最後一個意圖過濾器不允許從郵件打開任何文件。仍在嘗試解決它。您可以試試這個:將擴展名更改爲.db,並將android:mimeType更改爲上一個intent-filter中的application/octet-stream。希望這會有所幫助! – varun

+0

我今天取得了一些進展。你可以通過添加android:scheme =「content」來縮小你的最後一個過濾器。這樣至少不是所有的文件都將從文件管理器和其他應用程序關聯。對於文件和http,如果有多個「」,則需要添加更多的pathPattern。「在路徑 –

回答

1

這就是我現在在應用程序中設置意圖的方式。只需將.ext替換爲您的擴展名即可。另請注意,我正在使用mimeType =「*/*」。必須這樣做才能使其與Astro文件管理器一起工作。現在通過刪除內容方案中的android:host =「*」來獲得它與電子郵件一起工作。

<!-- For email --> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="content" /> 
    <data android:pathPattern=".*\\.ext" /> 
    <data android:mimeType="application/octet-stream" /> 
</intent-filter> 

    <!-- For http --> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="http" /> 
    <data android:host="*" /> 
    <data android:pathPattern=".*\\.ext" /> 
    <data android:pathPattern=".*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ext"/> 
    <data android:mimeType="*/*" /> 
</intent-filter> 

<!-- For https --> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="https" /> 
    <data android:host="*" /> 
    <data android:pathPattern=".*\\.ext" /> 
    <data android:pathPattern=".*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ext"/> 
    <data android:mimeType="*/*" /> 
</intent-filter> 

<!-- For file browsers and google drive --> 
<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=".*\\.ext" /> 
    <data android:pathPattern=".*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ext"/> 
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ext"/> 
    <data android:mimeType="*/*" /> 
</intent-filter> 
+1

解決方案完美的作品。但現在有一個新問題。當我在Samsung Galaxy S III(Android 4.1.2)上收到Gmail警報時,它會問我是否要使用Gmail或我的應用程序打開郵件。如果我選擇「僅一次」使用Gmail,郵件將打開。如果我選擇「始終」,整個手機將重新啓動。需要對意向過濾器進行哪些更改? – varun

+0

在我的Nexus 4上沒有這個問題,我將不得不在朋友S3上進行測試。你在內容方案的意圖過濾器中有嗎? 請讓我知道如果你仍然有這個問題! –

+0

問題已解決...謝謝 – varun