Java 在SD卡上创建文件
我在将数据库备份到SD卡时遇到问题。 目标SDK:25 电话:23 另外,Environment.getExternalStorageDirectory()方法对我来说工作不正常(因为它返回内部存储路径) 我正在使用另一种方法获取SD卡的路径,该路径返回我: /mnt/media_rw/8209-21EA 当getExternalStorageDirectory()返回时: /存储/模拟/0 我通过ES访问了/mnt/media_rw/8209-21EA,这是我手机上SD卡的真实路径 至少ES正在使用/storage/8209-21EA/path访问我的SD 所以,当我试图在上调用“file.mkdirs()”时 此方法给我“false”,并且不创建任何文件夹 我正在使用此代码获取权限:Java 在SD卡上创建文件,java,android,Java,Android,我在将数据库备份到SD卡时遇到问题。 目标SDK:25 电话:23 另外,Environment.getExternalStorageDirectory()方法对我来说工作不正常(因为它返回内部存储路径) 我正在使用另一种方法获取SD卡的路径,该路径返回我: /mnt/media_rw/8209-21EA 当getExternalStorageDirectory()返回时: /存储/模拟/0 我通过ES访问了/mnt/media_rw/8209-21EA,这是我手机上SD卡的真实路径 至少ES正
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);
}
}
及
在我的清单文件中
有什么办法让它工作吗?用这个来获取SD卡路径
Context.getExternalFilesDirs();
请注意,如果在访问期间未安装或移动SD卡,则可能返回null。此外,您可能需要将这些权限添加到清单文件中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
另外,Environment.getExternalStorageDirectory()方法对我来说工作不正常(因为它返回内部存储路径)
不是,这两个都不是
至少ES正在使用/storage/8209-21EA/path访问我的SD
除非您的设备上预先安装了“ES”,否则它与您一样没有使用可移动存储的更多权限
因此,当我试图在file=new文件(getRemovebleSDCardPath()+“/data/com.indi.passwords”)上调用“file.mkdirs()”代码>此方法给我“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);
}
}
这些权限与可移动存储无关
有没有办法让它工作起来
如果“that”是您现有的代码,那么这是不可能的,除非在根设备上
如果“那”是将一些数据写入可移动存储器,则您可以选择:
- 使用
getExternalFilesDirs()
,getExternalCacheDirs()
,或getExternalMediaDirs()
,在上下文中使用所有方法。如果它们在数组返回值中返回2+个项目,则第二个和后续的项目位于可移动存储上。您可以在没有任何权限的情况下读取和写入这些位置
- 或者,使用
ACTION\u CREATE\u DOCUMENT
允许用户选择将数据放置在何处,这些数据可能是可移动存储,也可能不是可移动存储。在ContentResolver
上调用openOutputStream()。使用该OutputStream
编写内容
可能是多余的,但我的直觉告诉我,您可能也想添加读取权限。它在SDK 22上工作,没有“读取”perm,但谢谢:)我将添加emFile path[]=新文件[10];路径=getExternalFilesDirs(null);文件路径[]=新文件[10];路径=getExternalFilesDirs(null);路径[1]对我很有用,非常感谢。如果我不想在卸载应用程序时删除我的数据库,该怎么办?@Maciek:告诉用户在卸载应用程序之前弹出他们的可移动存储。您没有直接文件系统到可移动存储上的任何位置,在卸载应用程序后,文件将保留在该位置。ACTION\u CREATE\u DOCUMENT
方法可以在卸载应用程序后保留您的内容,但您无法控制内容的去向,您只能访问流,不能访问文件系统。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />