11

アプリを使用してカスタム拡張子のファイルを開く必要があります。ファイルがSDカードにある場合、インテントフィルターを使用してこれを行うことができます。ファイルが Gmail の添付ファイルとして送信された場合、[ダウンロード] ボタンと [プレビュー] ボタンも表示されます。ただし、ダウンロード/プレビュー ボタンをクリックすると、「申し訳ありませんが、添付ファイルをダウンロードできませんでした」というメッセージが表示されました。

これは私のアプリの問題だと思いました。しかし、私はランダムなアイデアを思いついたので、携帯電話に「すべてのファイルをダウンロード」アプリをインストールしました。 https://play.google.com/store/apps/details?id=com.hwkrbbt.downloadall&hl=en 次に、Gmail のダウンロード ボタンをクリックすると、すべてのファイルをダウンロードとマイ アプリの両方がファイルをダウンロードするように提案されます。アプリを選択しましたが、すべて正常に動作します!!

これはセキュリティ上の問題ですか?これらは私の意図フィルターです:

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

編集: これが完全なアクティビティ タグです。

  <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>
4

1 に答える 1

9

私は自分でそれを理解したので、他の誰かがこの奇妙な問題に遭遇した場合に備えて、解決策を投稿しています.

インテント フィルタには、MIME タイプが application/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"/>

于 2012-11-18T15:58:07.867 に答える