gpt4 book ai didi

java - 如何使用范围目录访问权限系统读取文件?

转载 作者:行者123 更新时间:2023-12-02 11:18:07 24 4
gpt4 key购买 nike

我正在尝试在 Android 7.0 (Samsung S7) 上访问我的 SD 卡,我发现这是获得权限的可能方法:https://developer.android.com/training/articles/scoped-directory-access

我写了下面的代码

public class MainActivity extends AppCompatActivity {

Intent sdCardIntent;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
StorageVolume sdCARD = null;
for (StorageVolume volume : sm.getStorageVolumes()) {
if (volume.getDescription(this.getApplicationContext()).equals("SD card")) {
sdCARD = volume;
}
}
if (sdCARD == null) {
return;
}
sdCardIntent = sdCARD.createAccessIntent(null);
startActivityForResult(sdCardIntent, 0);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

// Access sd card?
}
}

运行时,我收到权限提示,并且似乎可以工作,因为我在 onActivityResult 中收到事件,但我还没有找到如何访问 SD 卡上的任何文件或目录。

我必须使用从 Intent 结果中获取的 URI 吗?

最佳答案

Do I have to use the URI I get from the Intent result?

是的。该 Uri 应该表示一棵文档树,因此您可以使用 DocumentFile.fromTreeUri() 获取该树上的 DocumentFile。从那里,您可以迭代内容并获取各个内容的 Uri 对象。使用 ContentResolver 及其 openInputStream() 方法读取任何此类内容。

但是:

  • 请在后台线程上执行 I/O

  • 如果您希望将 Uri 传递给另一个组件(例如 Activity、服务),即使是在您自己的应用内,也请务必包含 FLAG_GRANT_READ_URI_PERMISSION 和/或FLAG_GRANT_WRITE_URI_PERMISSION到您的Intent

关于java - 如何使用范围目录访问权限系统读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com