我将数据库备份到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>
在我的清单文件中。
任何想法如何使其有效?
答案 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
来撰写您的内容。