android - 使用改造从服务器下载 pdf
问题描述
我从服务器下载 pdf 文件时遇到问题,我找到了转换字节数组的函数,我使用的是 android 10 xiaomi mi 9。
private fun InputStream.saveToFile(file: String) = use { input ->
File(file).outputStream().use { output ->
input.copyTo(output)
}
}
如果我使用这个乐趣我有例外
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.securityenginee, PID: 4154
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.io.FileNotFoundException: 1606998235369.pdf: open failed: EROFS (Read-only file system)
at libcore.io.IoBridge.open(IoBridge.java:496)
at java.io.FileOutputStream.<init>(FileOutputStream.java:235)
at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
at com.example.securityenginee.view.fragment.contragentAndAppInfo.ActsAndCountsFragment.saveToFile(ActsAndCountsFragment.kt:339)
我的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
这个我检查权限
val permissionStatus1 =
ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)
if (permissionStatus1 == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(requireContext(), "PERMISSION_GRANTED", Toast.LENGTH_SHORT).show()
}else if (permissionStatus1 == PackageManager.PERMISSION_DENIED){
Toast.makeText(requireContext(), "PERMISSION_DENIED", Toast.LENGTH_SHORT).show()
}
所有权限 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 发送 PERMISSION_GRANTED。
现在我更改功能保存文件,他也不起作用
fun writeBytesAsPdf(bytes: ByteArray) {
val path = requireContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
var file = File.createTempFile("my_file", ".pdf", path)
val fos = FileOutputStream(file)
fos.write(bytes)
fos.flush()
fos.close()
Toast.makeText(requireContext(), "test", Toast.LENGTH_SHORT).show()
}
解决方案
推荐阅读
- html - 如何实现 div 改变其他 div 的背景的一致性?
- java - Java WAR 中的 Angular RouterModule
- r - 如何测试 R 包中的函数是否是通用的
- python - 将扫描的 PDF 提取文本导入 CSV
- transform - 取消选中 3 个转换复选框
- microsoft-graph-api - 页面的 onenote 级别和顺序属性
- angular - 组验证器不会影响 form.isValid
- ios - 核心数据。如何交换 NSPersistentStores 并通知 NSFetchedResultsController?
- python - 如何预期 Python 中的机器人框架会失败?
- java - 日期时间比较给出不正确的结果