[Android]Java.io.IOException: Permission denied when WRITE_EXTERNAL_STORAGE permission is set [dupli

Posted

技术标签:

【中文标题】[Android]Java.io.IOException: Permission denied when WRITE_EXTERNAL_STORAGE permission is set [duplicate]【英文标题】: 【发布时间】:2020-06-24 05:04:23 【问题描述】:

我试图在 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 Q?...... @blackapps 是的。对。 该目录在 Android Q 下不再可用。在过去的几个月里,这里每天报告两次或三次。 ***.com/q/58379543, ***.com/q/57116335 @MikeM。哦,我解决了。非常感谢。 【参考方案1】:

添加以下内容 权限ActivityCompat.requestPermissions(SplashActivity.this, new String[]Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, 1);

【讨论】:

以上是关于[Android]Java.io.IOException: Permission denied when WRITE_EXTERNAL_STORAGE permission is set [dupli的主要内容,如果未能解决你的问题,请参考以下文章

使用 jdk自带ssl包 进行 https通讯双向认证

java32:I/O

Android逆向系列文章— Android基础逆向

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本