在 Android 8.0 中未创建外部目录文件夹,但当目标 SDK 版本为 26 时,它在 6.0 和 7.0 设备中工作
Posted
技术标签:
【中文标题】在 Android 8.0 中未创建外部目录文件夹,但当目标 SDK 版本为 26 时,它在 6.0 和 7.0 设备中工作【英文标题】:In External directory folder is not created in Android 8.0 but it is working in 6.0 and 7.0 devices when target SDK version is 26 【发布时间】:2019-06-25 18:20:31 【问题描述】:External storage
在 android 8.0 设备中没有创建文件夹目录,但在 6.0 和 7.0 设备中可以使用。我总是得到
“无法创建应用目录错误”
。当应用程序目标版本为 26 时。如果我将目标版本设置为 external storage 中创建一个文件夹。
File appDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + fileName);
try
if (!appDirectory.exists() && !appDirectory.mkdir())
Log.d(TAG, "Unable to create App Directory for: " + fileName + " File");
catch (RuntimeException exception)
exception.printStackTrace();
在Manifest文件中添加
"WRITE_EXTERNAL_STORAGE"
权限。
【问题讨论】:
你创建了文件提供者吗? 【参考方案1】:我这里有类似的解决方案:Android 8.1 - Problem trying to create directory in external storage
从 Android 6.0 到最新版本,请求深度权限需要手动编码,而不仅仅是在 Manifest 中提供。你的代码没有问题。这里要证明:在你的安卓设备上,进入设置>>应用>>你的应用>>权限>>允许外部存储权限。你的应用程序会工作,试试吧。 (但其他用户也必须这样做)所以这里是如何在不进入设置的情况下对其进行编码:
在onCreate里面,放这个。
if(ContextCompat.checkSelfPermission
(this,Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this,new String[]
Manifest.Permission.WRITE_EXTERNAL_STORAGE,
Manifest.Permission.READ_EXTERNAL_STORAGE,
//other permissions you like to add
,1);
现在应该可以了。
【讨论】:
以上是关于在 Android 8.0 中未创建外部目录文件夹,但当目标 SDK 版本为 26 时,它在 6.0 和 7.0 设备中工作的主要内容,如果未能解决你的问题,请参考以下文章
错误记录Android 分区存储下的 SD 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )
错误记录Android 分区存储下的 SD 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )