- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道,如果我启动以下 Intent.ACTION_GET_CONTENT
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("application/zip");
startActivityForResult(intent, RequestCode.REQUEST_CHOOSE_BACKUP_FILE);
并尝试通过以下方式从 intent 中读取返回的 Uri。
Uri uri = data.getData();
// Figure out extension
ContentResolver contentResolver = getContext().getContentResolver();
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
final String extension = mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
File temp = null;
try {
temp = File.createTempFile(Utils.getJStockUUID(), "." + extension);
} catch (IOException e) {
e.printStackTrace();
}
// Delete temp file when program exits.
temp.deleteOnExit();
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = getContext().getContentResolver().openInputStream(uri);
outputStream = new FileOutputStream(temp);
byte[] buffer = new byte[8 * 1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
Log.e(TAG, "", e);
} finally {
close(outputStream);
close(inputStream);
}
是否需要READ_EXTERNAL_STORAGE
权限?
我测试了几轮。令我惊讶的是,我可以在不请求 READ_EXTERNAL_STORAGE
的情况下执行成功读取。
我只是想确认 READ_EXTERNAL_STORAGE
在所有情况下都不需要从 Intent.ACTION_GET_CONTENT
中读取 Uri。
最佳答案
我遇到过用户安装第三方文件管理器 ( File Manager+ ) 的情况,在这些情况下,如果未首先授予 READ_EXTERNAL_STORAGE 权限(仅如果他们使用第三方应用程序来选择文件,如果他们使用 Google Drive 或正常的系统选择,它在未经许可的情况下工作正常)。
通过在我的一个带有 Play 商店的模拟器上安装 File Manager+ 并进行试用,我能够复制该行为。
关于android - 从 Intent.ACTION_GET_CONTENT 读取 Uri 是否需要 READ_EXTERNAL_STORAGE 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50826019/
这个问题在这里已经有了答案: Writing external storage doesn't work until I restart the application on Android M (
我正在尝试使用 Android 6.0 请求运行时权限。这是我的代码: private void enablePermission() { String[] PERMISSIONS = { M
我正在尝试从存储中读取图像路径,但我一直在此处收到 SecurityException: Caused by: java.lang.SecurityException: Permission Deni
当用户接受READ_EXTERNAL_STORAGE权限时,权限授予成功(在debug中可以看到)。但是在重新启动应用程序之前无法读取目录(dir.canRead() 在调试中为 false)。 mi
我正在尝试创建一个简单的应用程序,它可以从 Gallery 应用程序获取图像并将其显示在 imageButton 上。我正在运行 Android 5.0.1 的手机上使用 API 21 进行测试。不幸
我正在模拟器上测试我的应用。我有一个导出功能,可以在外部存储的下载目录中创建和写入文件。我还有一个导入功能,可以从外部存储的下载目录中读取文件。 来自 Android documentation :
我正在尝试将照片发送到服务器,但我无法仅在 Android 10 上访问该照片。发出 READ_EXTERNAL_STORAGE 请求,单击“允许”,在设置中,允许访问存储。 list fragm
自从将 Cordova 应用程序移至 Android Studio 后,我尝试在它上打开相机,但现在它已停止工作。 我没有收到任何权限弹出窗口,也没有在用户端显示任何其他内容。 我在 Android
我正在尝试获取设备上所有图像的列表。实现这一目标的关键命令是查询命令: Cursor cursor = getContentResolver().query( M
我正在制作画廊。 我得到了以下异常 Caused by: java.lang.SecurityException: Permission Denial: reading com.android.pro
第一次在这里提问。 无论如何,正如标题所说,我正在尝试将我的应用程序转换市场。 当我尝试上传已签名的 apk 时,出现错误: Upload failed Duplicate declarations
我在我的应用程序中使用 MediaStore 类并遇到以下错误 (logcat), E/DatabaseUtils: Writing exception to parcel java.lang.Sec
声明就够了吗?还是我也必须声明 ? Javadocs 省略了这一重要信息。 最佳答案 最好是显式地声明这两个权限,但仅声明 android.permission.WRITE_EXTERNAL_STOR
我正在尝试访问用户设备上的媒体文件(音乐)来播放它们;一个简单的“hello world”——音乐播放器应用。 我遵循了一些教程,它们基本上给出了相同的代码。但这行不通;它一直在崩溃并告诉我: err
在 androidmanifest.xml 我有: 在 build.gradle 我有: android { compileSdkVersion 23 buildTools
我已经阅读了所有类似的问题,但是找不到解决方案。这是android 10。 我需要你的帮助file.isFile()返回true。 但是file.canRead()返回false。因此,FileInp
我想检查我是否需要 Manifest.permission.READ_EXTERNAL_STORAGE 来读取给定的 Uri。 这是正确处理传入 Intent 到我的应用程序所必需的。例如,如果我从
我有一个曾经在 Delphi Seattle 创建的项目,现在我想搬到 Delphi Rio。我使用 findfirst/findnext 读取外部 SD 卡上的目录结构 i := findfir
当 Android 4.1 JellyBean (API 16) 在 Google I/O 上发布时,它引入了以下权限: READ_EXTERNAL_STORAGE Provides protecte
我的应用程序面向 api 级别 32。在 Android 13 设备上运行时,ActivityResultContracts.RequestMultiplePermissions() 始终返回 PER
我是一名优秀的程序员,十分优秀!