Android11写入文件,android - 无法在Android 11中写入和打开文件 - 堆栈内存溢出

在我的应用程序中,按钮事件从服务器返回PDF的base64字符串。 然后,我将此base64写入文件。 并尝试通过外部PDF查看器打开它。 它在Android设备(除Android 11之外)上均可正常运行。请在下面查看我的代码。

byte[] decodedContent = android.util.Base64.decode(base64.getBytes(), Base64.DEFAULT);

try {

File path = new File(getApplicationContext().getExternalFilesDir(null).getAbsolutePath(), "PDFData");

if (!path.exists()) {

path.mkdirs();

}

file = new File(path, "myPDF.pdf");

outputStream = new FileOutputStream(file);

outputStream.write(decodedContent);

outputStream.close();

Uri targetUri = Uri.fromFile(file);

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(targetUri, "application/pdf");

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

PackageManager pm = getApplicationContext().getPackageManager();

if (pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) == null) {

Toast.makeText(getApplicationContext(), "No application found to open PDF, please install one.", Toast.LENGTH_SHORT).show();

}

else{

startActivity(intent);

}

} catch (FileNotFoundException ex) {

ex.printStackTrace();

Log.d("FileNotFound", "FileNotFoundException");

} catch (IOException ex) {

ex.printStackTrace();

Log.d("IOException", "IOException");

} finally {

// Make absolutely certain the outputStream is closed

try {

Log.d("outputStream", "outputStream");

if (outputStream != null) {

outputStream.close();

}

} catch (IOException ex) {

ex.printStackTrace();

}

清单文件中已经具有以下权限:

请帮我解决一下这个。 提前致谢!

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值