Dan*_*nny 19 android mkdir android-sdcard
当我启动我的Android应用程序时,我需要在SD卡上创建一个目录,对于少数用户而言这是失败的,我无法弄清楚它的原因......
(我发现WRITE_EXTERNAL_STORAGE权限丢失导致类似的问题,它就在那里,它适用于几乎所有用户,所以我认为这不是原因)
我已经简化了以前的情况,以便更容易解释,如果创建一个directoy失败,我运行一个测试用例,我尝试在sdcard上创建一个.test目录:
new File(Environment.getExternalStorageDirectory(), ".test").mkdir() -> false
new File(Environment.getExternalStorageDirectory(), ".test").mkdirs() -> false
Run Code Online (Sandbox Code Playgroud)
相关目录的文件属性:
/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 =装
(canExecute返回错误,因为测试是在sdk <9上运行的)
建议和想法非常受欢迎......
Vla*_*nov 15
您在清单中没有权限时很常见.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
至于我,这是唯一错误的事情.
首先,技术上mkdirs()返回false并不意味着它失败了,它只是意味着它没有创建目录.如果目录已经存在,那么mkdirs()将继续返回false.
其次,在Android 6中,您不仅需要:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
你还需要一些相当于:
ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
Run Code Online (Sandbox Code Playgroud)
有关检查权限的详细信息,请参阅:https:
//github.com/googlesamples/android-RuntimePermissions
小智 6
我有一个类似的问题,花了几个小时才意识到出了什么问题.它不适用于Sumsung Mega,但对于其他手机,它工作得很好.我真的有WRITE_EXTERNAL_STORAGE权限,并且getExternalStorageDirectory已安装且可用.但是仍然没有创建目录.有什么帮助?我刚重新启动了维修!它帮助了!遗憾的是之前没有人提出过这样的建议.希望这会有所帮助!
| 归档时间: |
|
| 查看次数: |
17289 次 |
| 最近记录: |