当启动我的android应用程序时,我需要在SD卡上创建一个目录,对于少数用户来说,这是失败的,我找不到原因……
(我发现了类似的WRITE_EXTERNAL_STORAGE权限缺失导致的问题,它就在那里,它几乎对所有用户都有效,所以我不认为这是原因)
我已经简化了前面的情况,以便更容易解释,如果创建目录失败,我运行一个测试用例,尝试在SD卡上创建一个.test目录:
new File(Environment.getExternalStorageDirectory(), ".test").mkdir() -> false
new File(Environment.getExternalStorageDirectory(), ".test").mkdirs() -> false
相关目录的文件属性:
/sdcard/.test (exists=false canWrite=false canRead=false canExecute=err isDirectory=false isFile=false)
/sdcard (exists=true canWrite=true canRead=true canExecute=err isDirectory=true isFile=false)
/ (exists=true canWrite=false canRead=true canExecute=err isDirectory=true isFile=false)
getExternalStorageState=mounted
(canExecute返回错误,因为测试是在sdk <9上运行的)
我们非常欢迎您的建议和想法。
发布于 2010-10-31 18:23:55
当您在清单中没有权限时,这是很常见的。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
对我来说,这是唯一错误的事情。
发布于 2015-05-30 03:23:40
我遇到了类似的问题,花了几个小时才意识到哪里出了问题。它在Sumsung上不起作用,但在其他手机上运行得很好。我真的有WRITE_EXTERNAL_STORAGE权限,getExternalStorageDirectory已经挂载并可用了。但是目录仍然没有被创建。有什么帮助?我刚重新启动了设备!这是有帮助的!遗憾的是,以前没有人建议这样做。希望这能有所帮助!
发布于 2016-02-17 09:47:52
首先,从技术上讲,mkdirs()返回false并不意味着它失败了,它只是意味着它没有创建目录。如果这些目录已经存在,那么mkdirs()将继续返回false。
其次,在Android 6中,您不仅需要:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
您还需要以下内容的等价物:
ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
有关检查权限的详细信息,请参阅:
https://stackoverflow.com/questions/4062357
复制相似问题