调用系统文件管理器选择文件须知
2018-11-20 本文已影响17人
有点不一样呢
通常我们在调用系统文件管理器选择文件时是这样的:
try {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
activity.startActivityForResult(intent, 1);
} catch (ActivityNotFoundException e) {
Log.e(TAG,e.getMessage());
}
这样我们可以选择任何类型的文件,但是如果你尝试多种手机之后你会发现,事实并不是我你们想象的一样,比如在姆比亚的手机上我们却不能跳转到文件管理器去选择文件,看来并不是所有的手机都能拿正确的支持 */* 这样的格式,但是如何我们指定为file/*这样的type后我们能够去选择文件了,但是却无法展示最近的一些文件,那么如何解决这一问题呢?
其实系统中还给我们提供了其他的一些方式,比如我们将type写成这样:
intent.setType("file/*|*/*");
我们可以指定为多种类型,这样就能修复兼容性的问题,如果sdk的版本在19及以上时,我们还需要依据代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[]{"file/*", "*/*"});
}
我们可以指定多种类型,前提是我们依然需要设置type,系统不会去自动获取我们额外设置的属性;
所以以后我们选择文件的Intent可以这样设置:
public static Intent getSelectFileIntent() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[]{"file/*", "*/*"});
}
intent.setType("file/*|*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
return intent;
}