Я хочу выбирать изображения и файлы PDF из проводника только с помощью одного намерения. В настоящее время я использую этот фрагмент кода. Этот код работает нормально для всех устройств, кроме Samsung File Explorer. У меня Samsung J7, благодаря которому я могу выбрать любой тип файла.
public void getFile() {
String[] mimeTypes = {"image/*", "application/pdf"};
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
intent.setType(mimeTypes.length == 1 ? mimeTypes[0] : "*/*");
if (mimeTypes.length > 0) {
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes); }
} else {
String mimeTypesStr = ""; for (String mime : mimeTypes) {
mimeTypesStr += mime + "|"; }
intent.setType(mimeTypesStr.substring(0,mimeTypesStr.length() - 1));
}
// special intent for Samsung file manager
Intent sIntent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
// if you want any file type, you can skip next line
sIntent.putExtra("CONTENT_TYPE", mimeTypes);
sIntent.addCategory(Intent.CATEGORY_DEFAULT);
Intent chooserIntent;
if (mActivity.getPackageManager().resolveActivity(sIntent, 0) != null) {
// it is device with samsung file manager
chooserIntent = Intent.createChooser(sIntent, "Select file");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{intent});
} else {
chooserIntent = Intent.createChooser(intent, "Select file");
}
try {
startActivityForResult(chooserIntent, Constants.PICK_FILE_REQUEST_CODE);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(mActivity, "No suitable File Manager was found.", Toast.LENGTH_SHORT).show();
}
}