Android 6 写入权限无法扩展SD卡

3
我无法获得Android 6对于内存扩展SD卡的写入权限。我遇到了“Permission denied”异常。我的目标是使用Android 6,targetSdkVersion 24,并在清单文件中使用uses-permission请求和运行时权限请求来进行WRITE_EXTERNAL_STORAGE操作。我已经在onRequestPermissionsResult()中获得了授权许可的回复。
我可以从这个SD卡中读取数据,但是我无法将数据写入其中。我正在使用三星Note 4,6.0.1版本。我试图将文件写入路径“/storage/3530-3464/my_file.txt”,但是在执行此行代码时出现了异常。
File file = new File(SD1_StoragefilePath);
FileOutputStream fop = new FileOutputStream(file); // get permission exception here.

清单文件:

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

运行时权限:

ActivityCompat.requestPermissions(this, 
    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
    PERMISSION_REQ_REPLAY_WRITE_EXTERNAL_STORAGE);

非常正常。您不能再以通常的方式向SD卡写入。只能在一个特定的应用程序目录中,通过getExternalFilesDirs()方法访问。 - greenapps
如果您想要写入整个SD卡,则请使用存储访问框架。 - greenapps
1个回答

1
感谢你的帮助,greenapps。 使用已实现的SAF:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE_STORAGE_ACCESS);

我可以拥有对整个SD卡的写访问权限。 其中有两个问题:
  1. 在实现意图命令时,会出现一个有趣的卡片选择活动,是否有办法摆脱这个选择活动,并默认选择SD根目录。 Intent.ACTION_OPEN_DOCUMENT_TREE activity
  2. 每次应用程序启动时都会出现此活动。 有没有一种方法可以记住此权限已被授予?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接