質問: android特定のファイル拡張子の意図フィルター? 特定の拡張子を持つファイルを「ネット」からダウンロードできるようにしたいので、それを処理するためにアプリケーションに渡しますが、インテントフィルターを把握できませんでした。ファイルタイプはmimeタイプに含まれていないため、使用してみました<data android:path="*.ext" /> しかし、私はそれを機能させることができませんでした。
回答: 私は、カスタムファイル拡張子について、これにかなり苦労しています。多くの検索の後、私は このwebページ を見つけました。ここで、ポスターにandroidのpatternmatcherクラス(intent-filtersのpathpatternマッチングに使用される)がパスに最初の文字パスの他の場所での一致パターン(「* .xyz」と一致させようとしている場合、パスの前に「x」があるとpatternmatcherクラスは停止します)。これは彼が回避策のために見つけて、私のために働いたものですが、それはちょっとしたハックです: patternmatcherはintentfilterのpathpatternに使用されますが、patternmatcherのアルゴリズムは非常に奇妙です。 android patternmatcherのアルゴリズムです。 文字列の途中に「。*」パターンの「次の文字」がある場合、patternmatcherはそのポイントでループを停止します。 (androidフレームワークのpatternmatcher.javaを参照してください。) 例文字列:「これは私の添付ファイルです」パターン:「。att。」。 android patternmatcherは、パターンの次の文字(この例では 'a')に一致するまで '。'パターンに一致するループに入ります)したがって、 '。 'マッチングループはインデックス8-' is 'と' my 'の間の' a 'で停止するため、このマッチの結果は' false 'を返します。 かなり奇妙ですね。これを回避する-実際に可能性を減らす-開発者は迷惑な愚かなpathpatternを使用する必要があります。 例目標:「メッセージ」を含む一致するuriパス。 <intent-filter> ... <data android:pathpattern=".*message.*" /> <data android:pathpattern=".*m.*message.*" /> <data android:pathpattern=".*m.*m.*message.*" /> <data android:pathpattern=".*m.*m.*m.*message.*" /> <data android:pathpattern=".*m.*m.*m.*m.*message.*" /> ... </intent-filter> これは、カスタムファイル拡張子と一致する場合に特に発行されます。