相关疑难解决方法(0)

在Android上写入外部SD卡的通用方式

在我的应用程序中,我需要在设备存储中存储大量图像.这些文件往往满足设备存储,我想让用户能够选择外部SD卡作为目标文件夹.

我到处读到Android不允许用户写入外部SD卡,SD卡是指外部和可安装的SD卡而不是外部存储器,但文件管理器应用程序设法在所有Android版本上写入外部SD.

在不同的API级别(Pre-KitKat,KitKat,Lollipop +)上授予对外部SD卡的读/写访问权限的更好方法是什么?

更新1

我从Doomknight的答案中尝试了方法1,但没有结果:正如您所看到的那样,我在尝试在SD上写入之前在运行时检查权限:

HashSet<String> extDirs = getStorageDirectories();
for(String dir: extDirs) {
    Log.e("SD",dir);
    File f = new File(new File(dir),"TEST.TXT");
    try {
        if(ActivityCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)==PackageManager.PERMISSION_GRANTED) {
            f.createNewFile();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我在两个不同的设备上尝试了访问错误:HTC10和Shield K1.

10-22 14:52:57.329 30280-30280/? E/SD: /mnt/media_rw/F38E-14F8
10-22 14:52:57.329 30280-30280/? W/System.err: java.io.IOException: open failed: EACCES (Permission denied)
10-22 14:52:57.329 30280-30280/? W/System.err:     at java.io.File.createNewFile(File.java:939)
10-22 14:52:57.329 30280-30280/? W/System.err:     at com.myapp.activities.TestActivity.onResume(TestActivity.java:167)
10-22 14:52:57.329 30280-30280/? W/System.err:     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1326)
10-22 14:52:57.330 30280-30280/? W/System.err:     at android.app.Activity.performResume(Activity.java:6338)
10-22 14:52:57.330 …
Run Code Online (Sandbox Code Playgroud)

java android android-sdcard android-external-storage

71
推荐指数
2
解决办法
4万
查看次数

如何获得外部存储SD卡大小(带有安装的SD卡)?

链接:我根据此链接进行了工作

我添加了这一行来查找大小(内部和外部)大小,

return availableExternalMemorySize/(1024*1024);
Run Code Online (Sandbox Code Playgroud)

我在平板电脑上测试过.我得到内部和外部SD卡大小,因为,

在内部存储中:

  1. 总内存--1007
  2. 可用内存 - 683

在外部存储中:

  1. 总记忆 - 1763
  2. 可用内存 - 1554

但在Tablet中,我看到了设置.外部存储大小为8GB.但是,当我通过编程方式进行测试时,它向我展示了1.7 GB.

查找外部存储大小的步骤是什么?

storage android sd-card android-external-storage

11
推荐指数
1
解决办法
7468
查看次数