ImagePath转换为Uri显示在ImageView中报错: open failed: EACCES (Permission denied)

Android Studio 中通过相机/相册获取图片,将图片显示在EditText中,并将图片的路径保存在SQLite数据库中,从sql数据库中取出该路径后,将其转换为uri显示在另一个ImageView控件中,报错: java.io.FileNotFoundException: /storage/emulated/0/Download/Browser/8057389_8057389_1308493783296_mthumb.jpg: open failed: EACCES (Permission denied)。求大佬指导
报错如下:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.demo2.android, PID: 14618
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.demo2.android/com.demo2.android.activity.InfoSheet}: java.io.FileNotFoundException: /storage/emulated/0/Download/Browser/8057389_8057389_1308493783296_mthumb.jpg: open failed: EACCES (Permission denied)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3869)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4011)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:111)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2466)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:240)
        at android.os.Looper.loop(Looper.java:351)
        at android.app.ActivityThread.main(ActivityThread.java:8364)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
     Caused by: java.io.FileNotFoundException: /storage/emulated/0/Download/Browser/8057389_8057389_1308493783296_mthumb.jpg: open failed: EACCES (Permission denied)
        at libcore.io.IoBridge.open(IoBridge.java:574)
        at java.io.FileInputStream.(FileInputStream.java:160)
        at java.io.FileInputStream.(FileInputStream.java:115)
        at android.content.ContentResolver.openInputStream(ContentResolver.java:1542)
        at com.demo2.android.activity.InfoSheet.initInfo(InfoSheet.kt:48)
        at com.demo2.android.activity.InfoSheet.onCreate(InfoSheet.kt:27)
        at android.app.Activity.performCreate(Activity.java:8397)
        at android.app.Activity.performCreate(Activity.java:8370)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1403)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3842)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4011) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:111) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2466) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loopOnce(Looper.java:240) 
        at android.os.Looper.loop(Looper.java:351) 
        at android.app.ActivityThread.main(ActivityThread.java:8364) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013) 
     Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
        at libcore.io.Linux.open(Native Method)
        at libcore.io.ForwardingOs.open(ForwardingOs.java:563)
        at libcore.io.BlockGuardOs.open(BlockGuardOs.java:274)
        at libcore.io.ForwardingOs.open(ForwardingOs.java:563)
        at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8243)
        at libcore.io.IoBridge.open(IoBridge.java:560)
        at java.io.FileInputStream.(FileInputStream.java:160) 
        at java.io.FileInputStream.(FileInputStream.java:115) 
        at android.content.ContentResolver.openInputStream(ContentResolver.java:1542) 
        at com.demo2.android.activity.InfoSheet.initInfo(InfoSheet.kt:48) 
        at com.demo2.android.activity.InfoSheet.onCreate(InfoSheet.kt:27) 
        at android.app.Activity.performCreate(Activity.java:8397) 
        at android.app.Activity.performCreate(Activity.java:8370) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1403) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3842) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4011) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:111) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2466) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loopOnce(Looper.java:240) 
        at android.os.Looper.loop(Looper.java:351) 
        at android.app.ActivityThread.main(ActivityThread.java:8364) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013

将图片上传到sql数据库代码:

private fun getInformation() {
        //获取EditText输入框中输入的信息
        val name = plantName.text.toString().trim()
        val date = takeCalendar.text.toString().trim()
        val time = detailedTime.text.toString().trim()
        val jingWeiDu = gainLongitudeAndLatitude.text.toString().trim()
        val address = takeSpot.text.toString().trim()
        val habitInfo = habitatType.text.toString().trim()
        val person = recordPerson.text.toString().trim()
        val remark = remark.text.toString().trim()
        val picturePath = plantPicture.text.toString()
        Log.d("PicturePath", picturePath)
        //上传到Android studio内置的SQLite数据库中
        uploadSQLite(name, picturePath, date, time, jingWeiDu, address, habitInfo, person, remark)
        //将文件上传到oss
        uploadFileTest(name, date, time, picturePath)

    }

    private fun uploadSQLite(name: String, path: String, date: String, time: String, weiDu: String, add: String, habit: String, person: String, remark: String,) {
        val db = mHelper?.writableDatabase
        val values = ContentValues().apply {
            put("plantName", name)
            put("plantPicture", path)
            put("takePhotoDate", date)
            put("takePhotoTime", time)
            put("takePhotoJW", weiDu)
            put("takePhotoSpot", add)
            put("takePhotoHabitat", habit)
            put("takePhotoPerson", person)
            put("infoRemark", remark)
        }
        val result = db?.insert("PlantInfo", null, values)
        println(result)
    }

从数据库中取出path变为uri代码:

private fun initInfo() {
        val db = mHelper?.writableDatabase
        val cursor = db?.query("PlantInfo", null, null, null, null, null, null)
//        val cursor = db?.rawQuery("select * from PlantInfo", null)
        if (cursor != null && cursor.count >= 1) {
            if(cursor.moveToFirst()) {
                do {
                    **val pic = cursor.getString(cursor.getColumnIndexOrThrow("plantPicture"))**
                    val name = cursor.getString(cursor.getColumnIndexOrThrow("plantName"))
                    val person = cursor.getString(cursor.getColumnIndexOrThrow("takePhotoPerson"))
                    val time = cursor.getString(cursor.getColumnIndexOrThrow("takePhotoDate"))
                    val add = cursor.getString(cursor.getColumnIndexOrThrow("takePhotoJW"))
                    //将照片显示出来
                    **val uri = Uri.fromFile(File(pic))
                    val bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(uri))**
                 
                    val infoStore = InfoQuery(bitmap, name, person, time, add)
                    infoQueryList.add(infoStore)
                } while (cursor.moveToNext())
            }
        } else {
            nothingInfo.visibility = View.VISIBLE
            displayList.visibility = View.GONE
            nothingInfo.text = "暂无数据"  //如果没有数据只显示一个提示性质的"暂无数据的"TextVew
        }
        cursor?.close()

1、sd卡的读写权限打开了吗?
2、targetsdk的版本是多少,29吗?
3、清单文件application节点加入android:requestLegacyExternalStorage="true"

33应该是Android13吧 动态申请图片的权限得单独申请