MediaFilePicker始终显示空目录

问题描述

我只复制了以下代码段,并注释了路径和根路径。并始终显示空目录,如下图所示。

import React from "react"; 
const {useContext} = React

我也在下面尝试过,但是没有用

MaterialFilePicker()
    .withActivity(this)
    .withCloseMenu(true)
    //.withPath(alarmsFolder.absolutePath)
    //.withRootPath(externalStorage.absolutePath)
    .withHiddenFiles(true)
    .withFilter(Pattern.compile(".*\\.(jpg|jpeg)$"))
    .withFilterDirectories(false)
    .withTitle("Sample title")
    .withRequestCode(FILE_PICKER_REQUEST_CODE)
    .start()

enter image description here

解决方法

这是权限问题。您必须在运行时添加权限。下面的代码段无需进行任何修改即可正常运行。

private fun checkPermissionsAndOpenFilePicker() {
        val permissionGranted = ContextCompat.checkSelfPermission(
            requireContext(),Manifest.permission.READ_EXTERNAL_STORAGE
        ) == PackageManager.PERMISSION_GRANTED

        if (permissionGranted) {
            openFilePicker()
        } else {
            if (shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE)) {
                showError()
            } else {
                requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),PERMISSIONS_REQUEST_CODE)
            }
        }
    }

    private fun showError() {
        Toast.makeText(
            context,"Allow external storage reading",Toast.LENGTH_SHORT
        ).show()
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,permissions: Array<String>,grantResults: IntArray
    ) {
        if (requestCode == PERMISSIONS_REQUEST_CODE) {
            if (grantResults.isNotEmpty() && grantResults.first() == PackageManager.PERMISSION_GRANTED) {
                openFilePicker()
            } else {
                showError()
            }
        }
    }

    private fun openFilePicker() {
        MaterialFilePicker()
            .withSupportFragment(this)
            .withRequestCode(FILE_PICKER_REQUEST_CODE)
            .withHiddenFiles(true)
            .withFilter(Pattern.compile(".*\\.(jpg)$"))
            .start()
    }

    override fun onActivityResult(requestCode: Int,resultCode: Int,data: Intent?) {
        super.onActivityResult(requestCode,resultCode,data)

        if (requestCode == FILE_PICKER_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
            data ?: throw IllegalArgumentException("data must not be null")

            val path = data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH)

            if (path != null) {
                Log.d("Path (fragment): ",path)
                Toast.makeText(
                    context,"Picked file in fragment: $path",Toast.LENGTH_LONG
                ).show()
            }
        }
    }

    companion object {
        private const val PERMISSIONS_REQUEST_CODE = 0
        private const val FILE_PICKER_REQUEST_CODE = 1
    }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...