即使在寻求存储权限后也没有创建目录

Posted

技术标签:

【中文标题】即使在寻求存储权限后也没有创建目录【英文标题】:Directory is not being created even after seeking Storage permission 【发布时间】:2021-08-17 20:23:50 【问题描述】:

我只是想创建一个目录,寻求所需的权限,包括清单中的权限,但仍然没有创建目录。

下面是我的代码-

public class MainActivity extends AppCompatActivity 


@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if(haveStoragePermission()) 

        File new_folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "Images");
        if (!new_folder.exists()) 
            new_folder.mkdirs();
            boolean k=   new_folder.mkdirs();
         if (k)
         
          Toast.makeText(this,"Directory created successfully",Toast.LENGTH_LONG).show();
         
         else Toast.makeText(this,"Failed to create directory",Toast.LENGTH_LONG).show();

        
        
    



【问题讨论】:

Mohit 已经告诉您无法创建该文件。 new_folder.mkdirs(); 但是.. 在此之前没有创建该文件夹。而且您不知道,因为您不检查 mkdirs() 的返回值。 是的,我之前也请求过权限,我已经编辑了我的问题,现在你也可以看到我的用户权限功能。 ????您仍然没有检查 mkdirs() 的返回值。做它并告诉会发生什么。更好的是:在调用异步任务之前检查文件夹是否存在。不要让自己失去权限。您应该首先编写好的代码,这样您就知道您不能从创建目录开始。并且知道你也会知道然后开始你的异步任务是无济于事的。 所以删除所有代码并仅发布您尝试创建该目录的代码。因为那是你的问题。 是的,按照你的建议检查了一下,返回false,我不明白为什么即使成功寻求许可。 【参考方案1】:

问题不在于文件下载。问题是您无权访问存储。请检查错误。

Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)

看来无法创建文件。您可能需要检查您是否具有写入存储的权限。如果您不想请求该权限,您可以在内部存储中创建文件。

你应该这样称呼它

if(haveStoragePermission()) 
    DownloadTask downloadTask = new DownloadTask();
    downloadTask.execute("https://www.popwebdesign.net/popart_blog/wp-content/uploads/2018/01/tiny-png-panda.jpg");

【讨论】:

但是我已经在 manifest.xml 中提到了以下权限 您是否提示过用户许可?用户是否允许?您可以在 App Info -> Permissions 中查看。 我已经编辑了我的问题,现在您还可以看到我的用户权限功能。我还检查了在应用程序管理器中,存储权限显示允许 你的MainActivity没有显示调用存储权限功能。也许您在加载此活动之前调用它。但更好的方法是在需要时请求它。用户可能已经撤销了权限。 对不起,我刚刚错过了在编辑时提到的,现在你可以看到我在 onCreate 方法的最开始调用了这个函数。我确保在 App manager Permission 部分中允许该权限。【参考方案2】:

问题出在 Android 10 权限,这里在清单中寻求权限有点不同,我们需要在 ma​​nifest.xml 中添加以下行- android :requestLegacyExternalStorage="true" 如下所述-

<application>
android:requestLegacyExternalStorage="true" 
</application>

【讨论】:

以上是关于即使在寻求存储权限后也没有创建目录的主要内容,如果未能解决你的问题,请参考以下文章

加载共享库时出错:即使在使用 LD_LIBRARY_PATH 并更改 $PATH 后也没有这样的文件或目录

Android kotlin:即使在授予权限后也获得 EACCES(权限被拒绝)

Facebook Android SDK 即使在许可后也没有电子邮件

Apache重启导致DocumentRoot必须是一个目录,即使它是一个目录并且似乎没有权限问题

EasyClick 修改system目录文件

EasyClick 修改system目录文件