在 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 storageandroid 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 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )

奥利奥中未显示通知

在 Android 中保存文件 - 适合初学者(内部/外部存储)

Ubantu16.04进行Android 8.0源码编译

Android——Android10的分区存储(Scoped Storage)