在SDCard上创建文件

时间:2016-12-23 18:19:32

标签: java android

我将数据库备份到SDCard时遇到问题。 目标SDK:25 手机SDK:23

另外,Environment.getExternalStorageDirectory()方法对我来说也不正常(因为它返回内部存储路径)。

我正在使用另一种方法来获取SD卡的路径,它返回给我: 的/ mnt / media_rw / 8209-21EA

当getExternalStorageDirectory()返回时: /存储/模拟/ 0

我通过ES访问了/ mnt / media_rw / 8209-21EA,这是我手机上SDCard的真正途径。

至少ES正在使用/ storage / 8209-21EA / path来访问我的SD。

所以,当我试图调用" file.mkdirs()"在

    file = new File(getRemovebleSDCardPath() + "/data/com.indi.passwords");
这个方法给了我" false"并且不会创建任何文件夹。

我正在使用此代码获取权限:

if (ContextCompat.checkSelfPermission(MainActivity.this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) {

                if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                } else {
                    ActivityCompat.requestPermissions(MainActivity.this,
                            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                            1);

                }
            }

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

在我的清单文件中。

任何想法如何使其有效?

2 个答案:

答案 0 :(得分:0)

用它来获取SD卡路径

Context.getExternalFilesDirs();

请注意,如果在访问期间未安装或移动SD卡,它可能会返回null。此外,您可能需要将这些权限添加到清单文件中:

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

答案 1 :(得分:0)

  

另外,Environment.getExternalStorageDirectory()方法对我来说也不正常(因为它返回内部存储路径)。

External storage不是internal storage,而且removable storage都不是{{3}}。

  

至少ES正在使用/ storage / 8209-21EA / path来访问我的SD。

除非您的设备上预先安装了“ES”,否则它无权使用可移动存储设备。

  

所以,当我试图在file = new File(getRemovebleSDCardPath() + "/data/com.indi.passwords");上调用“file.mkdirs()”时,这个方法会给我“假”并且不会创建任何文件夹。

正确。您没有直接文件系统访问可移动存储上的任意位置。

  

我正在使用此代码获取权限:

这些权限与可移动存储无关。

  

任何想法如何使其有效?

如果“那个”是您现有的代码,那么这是不可能的,除了可能在root设备上。

如果“that”将一些数据写入可移动存储,您的选择是:

  • getExternalFilesDirs()上使用getExternalCacheDirs()getExternalMediaDirs()Context所有方法。如果他们在数组返回值中返回2个以上的项,则第二个和后续的项在可移动存储上。您可以在没有任何权限的情况下读取和写入这些位置。

  • 或者,使用ACTION_CREATE_DOCUMENT允许用户选择放置数据的位置,可能是也可能不是可移动存储。在openOutputStream()上致电ContentResolver,传递Uri您从ACTION_CREATE_DOCUMENT请求中返回的内容。使用OutputStream来撰写您的内容。