複数の種類のファイルのAndroidインテントスクリーニング
Android Intent Screening Multiple Types Files
プロジェクトでは、特定の種類のファイルを選択する必要が頻繁に発生します。
ドキュメントの種類を指定します
通常、setTypeを実現するためにフィルターを使用します
例:PDFドキュメントの表示のみ
int requestCode = 100 Intent intent = new Intent(Intent.ACTION_GET_CONTENT) intent.setType('application/pdf') intent.addCategory(Intent.CATEGORY_OPENABLE) startActivityForResult(intent, requestCode)
しかし、複数の種類のファイルを指定したいが、pdf、excel、word、pptのこれらの種類のファイルを指定したい場合は、設定方法次第ですか?
複数のファイルタイプを指定する
オンラインでチェックインすると、答えは次のとおりです。
- 間違った方法1-スプライシングのsetType
intent.setType ( 'video / * image / *') // select both videos and pictures
- 2--間違った方法を数回呼び出すsetType
intent.setType('video/*') intent.setType('image/*')
どちらの方法も間違っています
私たちはコードを見てください
mTypeタイプ文字列
確認できるように、setTypeは毎回再割り当てされ、リストと配列に追加されないため、複数のタイプのファイルを指定する2つの方法で実現することは不可能です。
この実施形態は達成できないので、 したがって、Intentはフィールドデータを提供して、フィルターを通過できるようにします 私たちは公式文書とソースコードを通じて、Intentが提供していることがわかりました EXTRA_MIME_TYPESこのフィールドを渡しますが、配列型です
/** * Extra used to communicate a set of acceptable MIME types. The type of the * extra is {@code String[]}. Values may be a combination of concrete MIME * types (such as 'image/png') and/or partial MIME types (such as * 'audio/*'). * * @see #ACTION_GET_CONTENT * @see #ACTION_OPEN_DOCUMENT */ public static final String EXTRA_MIME_TYPES = 'android.intent.extra.MIME_TYPES'
したがって、結果は単純です。次のように、ppt、word、excel、pdfファイルタイプを指定します。
public static void openDirChooseFile(Activity activity, int requestCode, String[] mimeTypes) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT) if (mimeTypes != null) { intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes) } intent.setType('*/*') intent.addCategory(Intent.CATEGORY_OPENABLE) // intent.putExtra (Intent.EXTRA_ALLOW_MULTIPLE, true) // multiple choice activity.startActivityForResult(intent, requestCode) } public static void chooseFile(Activity activity, int requestCode) { String[] mimeTypes = {MimeType.DOC, MimeType.DOCX, MimeType.PDF, MimeType.PPT, MimeType.PPTX, MimeType.XLS, MimeType.XLSX} FileUtil.openDirChooseFile(activity, requestCode, mimeTypes) }
MimeTypeファイル
/** * @author Armyone * @date 2018/11/21 10:56 * @desc */ public class MimeType { public static final String DOC = 'application/msword' public static final String DOCX = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' public static final String XLS = 'application/vnd.ms-excel application/x-excel' public static final String XLSX = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' public static final String PPT = 'application/vnd.ms-powerpoint' public static final String PPTX = 'application/vnd.openxmlformats-officedocument.presentationml.presentation' public static final String PDF = 'application/pdf' }
意図は複数のファイルタイプを指定します、正しいアプローチは Intent.EXTRA_MIME_TYPES 実装されたMIMEタイプの配列が渡されました
intent.setType('*/*') intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)