バックグラウンド
ファイルを処理できることは、最新のデスクトップ OS で非常によく知られている機能であり、ユーザーは「ファイル関連付け」構成として、ファイル マネージャーや他のアプリからファイルを開くことができます。
問題
これまでのところ、Android でファイル タイプの関連付けを設定することは、ユーザーと開発者の両方にとってそれほど便利なことではありませんでした。
Android API 30 (Android 11、別名 Android R) までは、特にファイルが既知のものでない場合、いくつかの奇妙な回避策を使用する必要がありました。
「xyz」の例:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.OPENABLE" />
<data android:scheme="content" />
<data android:scheme="file" />
<data android:host="*" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.xyz" />
<data android:pathPattern=".*\\..*\\.xyz" />
<data android:pathPattern=".*\\..*\\..*\\.xyz" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.xyz" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.xyz" />
...
</intent-filter>
そして、それがZIPファイルなどの既知のものである場合、おそらく次のようなものです(それが最小/最良のものかどうかはわかりません):
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.OPENABLE" />
<data android:scheme="package" />
<data android:scheme="content" />
<data android:scheme="file" />
<data android:mimeType="application/x-zip" />
<data android:mimeType="application/x-zip-compressed" />
<data android:mimeType="application/zip" />
</intent-filter>
実際、既知の方法であっても、最初の方法しか処理しないアプリもあるため、両方の方法を使用することを検討する必要があります。
しかし、Android API 31 (Android 12、AKA Android S) では、それが変更されたようで、マニフェストに書き込むことができる可能性があります (悲しいことに、おそらく最小限の API が 31 の場合のみ)。
私が見つけたもの
これについて私が見つけた唯一のものはドキュメントにあります:
- https://developer.android.com/reference/android/R.attr#pathSuffix
- https://developer.android.com/reference/android/R.attr#pathAdvancedPattern
悲しいことに、私が見つけることができた例はありませんでした。また、現在ファイルを処理するための公式の方法であるかどうかさえわかりません.
質問
- Android でファイルを処理するための真の、有効な、公式の方法は本当に今ですか?
- 今はどう使えばいいの?mimeType を設定する必要はありますか? これは、既知であるかどうかにかかわらず、あらゆる種類のファイルで機能しますか?
- このように設定して、私が言及した方法の使用をやめることは可能ですか? または、これは minSdk を 31 に設定した場合のみですか?
- ユーザーのエクスペリエンスに何らかの影響がありますか?