[[Android] Java.io.IOException:设置WRITE_EXTERNAL_STORAGE权限后,权限被拒绝[重复]

问题描述 投票:0回答:1

我试图将文件存储在android中,但是我做不到。首先,我使用这样的标签在Androidmenifest.xml中添加了两个权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

并且,添加了检查MainActivity.kt中的两个权限的逻辑

override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)

       btn = findViewById(R.id.button)

       btn.setOnClickListener(object : View.OnClickListener{

       override fun onClick(v: View?) {
           checkPermission()
       }
     })

    }
    private fun checkPermission() {
           if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED
                        || checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED) {
                    if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                        Toast.makeText(this, "Read/Write external storage", Toast.LENGTH_SHORT).show()
                    }
                    requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE),
                            101)
                } else { 
                    writeFile()
                }
            }
        }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
            when (requestCode) {
                101 -> if (grantResults[0] == PackageManager.PERMISSION_GRANTED
                        && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
                    writeFile()
                } else {
                    Log.d("MainActivty", "Permission always deny")
                }
            }
        }

    private fun writeFile() {
            val file = File(Environment.getExternalStorageDirectory().getPath() + File.separator.toString() + "temp.txt")
            try {
                Log.d("MainActivty", "create new File : " + file.createNewFile())
            } catch (e: IOException) {
                e.printStackTrace()
            }
        }

最后,我通过嵌入式Amulator启动它。但是,有权限被拒绝。

错误日志在这里:

2020-03-12 15:46:22.317 4148-4148/com.techtown.permissiontest W/System.err: java.io.IOException: Permission denied
    2020-03-12 15:46:22.318 4148-4148/com.techtown.permissiontest W/System.err:     at java.io.UnixFileSystem.createFileExclusively0(Native Method)
    2020-03-12 15:46:22.318 4148-4148/com.techtown.permissiontest W/System.err:     at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
    2020-03-12 15:46:22.318 4148-4148/com.techtown.permissiontest W/System.err:     at java.io.File.createNewFile(File.java:1008)
    2020-03-12 15:46:22.318 4148-4148/com.techtown.permissiontest W/System.err:     at com.techtown.permissiontest.MainActivity.writeFile(MainActivity.kt:77)
    2020-03-12 15:46:22.319 4148-4148/com.techtown.permissiontest W/System.err:     at com.techtown.permissiontest.MainActivity.onRequestPermissionsResult

我该如何解决?

android kotlin android-external-storage
1个回答
0
投票

添加以下权限:

ActivityCompat.requestPermissions(SplashActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
© www.soinside.com 2019 - 2024. All rights reserved.