调用系统文件管理器选择文件须知

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;
    }
上一篇 下一篇

猜你喜欢

热点阅读