Read/Write 可移动 SD 卡(android 模拟器)
Read/Write Removable SD Card (android emulator)
每次我尝试读取 SD 卡(可移动存储)的信息时,我得到 android.system.ErrnoException: statvfs failed: EACCES (Permission denied)
我在清单文件中添加了权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
作为 minSdkVersion > 23
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
创建 activity 时调用上述方法(它显示弹出窗口并且我允许访问)
但是当我尝试访问设备时:(Path = /mnt/media_rw/13F4-1C18)
StatFs stat = new StatFs(path);
我收到这个错误:
java.lang.IllegalArgumentException: Invalid path: /mnt/media_rw/13F4-1C18
at android.os.StatFs.doStat(StatFs.java:46)
at android.os.StatFs.<init>(StatFs.java:39)
.....
Caused by: android.system.ErrnoException: statvfs failed: EACCES (Permission denied)
at libcore.io.Posix.statvfs(Native Method)
at libcore.io.BlockGuardOs.statvfs(BlockGuardOs.java:304)
at android.system.Os.statvfs(Os.java:506)
at android.os.StatFs.doStat(StatFs.java:44)
at android.os.StatFs.<init>(StatFs.java:39)
您知道如何允许访问可移动设备吗?
谢谢!
SD Card (external storage)
Removable storage is not external storage.
I added permissions in manifest file
这些权限与可移动存储无关。
I got this error
您不能直接访问可移动存储上任意位置的文件系统。
Have you any idea please how to allow access to EXTERNAL SD CARD ?
或者:
在Android 4.4+上,使用getExternalFilesDirs()
、getExternalCacheDirs()
、and/or getExternalMediaDirs()
(注意方法的复数形式名称)在 Android 4.4+ 上,以访问可移动存储上您的应用程序的唯一目录。您不需要任何权限即可使用这些目录。
在 Android 4.4+ 上,停止考虑可移动存储并使用 the Storage Access Framework。这允许用户指定内容所在的位置,可以是外部存储、可移动存储、Google 驱动器等。
在 Android 7.0+ 上,使用 StorageManager
及其 StorageVolume
API。
每次我尝试读取 SD 卡(可移动存储)的信息时,我得到 android.system.ErrnoException: statvfs failed: EACCES (Permission denied)
我在清单文件中添加了权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
作为 minSdkVersion > 23
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
创建 activity 时调用上述方法(它显示弹出窗口并且我允许访问)
但是当我尝试访问设备时:(Path = /mnt/media_rw/13F4-1C18)
StatFs stat = new StatFs(path);
我收到这个错误:
java.lang.IllegalArgumentException: Invalid path: /mnt/media_rw/13F4-1C18
at android.os.StatFs.doStat(StatFs.java:46)
at android.os.StatFs.<init>(StatFs.java:39)
.....
Caused by: android.system.ErrnoException: statvfs failed: EACCES (Permission denied)
at libcore.io.Posix.statvfs(Native Method)
at libcore.io.BlockGuardOs.statvfs(BlockGuardOs.java:304)
at android.system.Os.statvfs(Os.java:506)
at android.os.StatFs.doStat(StatFs.java:44)
at android.os.StatFs.<init>(StatFs.java:39)
您知道如何允许访问可移动设备吗?
谢谢!
SD Card (external storage)
Removable storage is not external storage.
I added permissions in manifest file
这些权限与可移动存储无关。
I got this error
您不能直接访问可移动存储上任意位置的文件系统。
Have you any idea please how to allow access to EXTERNAL SD CARD ?
或者:
在Android 4.4+上,使用
getExternalFilesDirs()
、getExternalCacheDirs()
、and/orgetExternalMediaDirs()
(注意方法的复数形式名称)在 Android 4.4+ 上,以访问可移动存储上您的应用程序的唯一目录。您不需要任何权限即可使用这些目录。在 Android 4.4+ 上,停止考虑可移动存储并使用 the Storage Access Framework。这允许用户指定内容所在的位置,可以是外部存储、可移动存储、Google 驱动器等。
在 Android 7.0+ 上,使用
StorageManager
及其StorageVolume
API。