• 赚钱入口【需求资源】限时招募流量主、渠道主,站长合作;【合作模式】CPS长期分成,一次推广永久有收益。主动打款,不扣量;

无法在Android 10中创建目录

Android cps12345 2个月前 (08-30) 72次浏览 0个评论

我无法在android 10中创建目录。直到android Oreo,该设备才能在设备上运行。

我尝试了两种创建文件夹的方法。

使用 File.mkdir():

   File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pastebin");
                    if (!f.isFile()) {
                        if (!(f.isDirectory())) {
                               success =  f.mkdir();
                        }

在此,变量success 始终为false,这表示未创建目录。

使用 Files.createDirectory():

   File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pastebin");
                    if (!f.isFile()) {
                        if (!(f.isDirectory())) {
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                                try {
                                    Files.createDirectory(Paths.get(f.getAbsolutePath()));
                                } catch (IOException e) {
                                    e.printStackTrace();
                                    Toast.makeText(getApplicationContext(), R.string.unable_to_download, Toast.LENGTH_LONG).show();
                                }
                            } else {
                                f.mkdir();
                            }
                        }

导致此异常:

pzy64.pastebinpro W/System.err: java.nio.file.AccessDeniedException: /storage/emulated/0/Pastebin
pzy64.pastebinpro W/System.err:     at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:391)
pzy64.pastebinpro W/System.err:     at java.nio.file.Files.createDirectory(Files.java:674)

我已经实现了运行时权限,

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

原因

正如在2019年3月首次披露的那样,默认情况下,您不再有权访问外部存储或Android 10+上的可移动存储中的任意位置。这包括Environment.getExternalStorageDirectory()和的其他方法Environment(例如,getExternalStoragePublicDirectory()。

对于Android 10和11,您可以将其添加android:requestLegacyExternalStorage=”true”到<application>清单中。这使您可以选择旧式存储模型,并且现有的外部存储代码将起作用。

否则,您的选择是:

  • 使用上的方法Context(例如getExternalFilesDir(),)访问应用可以写入的外部存储上的目录。您无需任何权限即可在Android 4.4+上使用这些目录。但是,卸载应用程序后,存储在其中的数据将被删除。
  • 使用存储访问框架,例如ACTION_OPEN_DOCUMENT和ACTION_CREATE_DOCUMENT。
  • 如果您的内容是媒体,则可以MediaStore用来将媒体放置在标准媒体位置。
喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址