2

当我在 Android Q 设备上测试打印 PDF 功能时,我突然遇到了这个问题。它在 Android P 之前运行良好。我尝试在互联网上找到解决方案,但没有用。任何帮助都会很好。

4

2 回答 2

0

我在升级到 API Level 31 时遇到了这个问题。

它来自这样一个事实,在我拥有的 pdfprint 类中,有一行代码带有:

if (file.createNewFile()) {
    return ParcelFileDescriptor.open(file, 

ParcelFileDescriptor.MODE_READ_WRITE); }

通过添加在创建文件之前删除文件的代码,它工作得很好

if (file.exists()) file.delete();

if file.createNewFile()
    return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);

我使用的代码是基于我在 Internet 上找到的代码,所以我没有花时间去清理它,但它解决了我的问题。

于 2022-03-01T10:28:44.900 回答
0

我通过参考这里的官方文档得到了解决方案:Android 10 Privacy

我们必须添加:

android:requestLegacyExternalStorage="true"

在版本 >= 29 的清单文件的应用程序标记中。

The documentation:

如果 {@code true} 此应用程序希望在旧存储模型下运行。请注意,由于政策或向后兼容性的原因,这可能并不总是得到尊重。不请求旧版存储的应用可以继续通过 {@code MediaStore} 发现和读取属于其他应用的媒体。默认值为: - {@code false} 适用于 targetSdkVersion >= 29 (Q) 的应用。- {@code true} 适用于 targetSdkVersion 29 的应用。

虽然从文章中说,从 Android 11 开始,将引入范围存储,因此从 Android 11 开始,这种解决方法是不可能的。

这里,

为了给开发者更多的测试时间,面向 Android 10(API 级别 29)的应用仍然可以请求 requestLegacyExternalStorage 属性。

因此,您将不得不强制跳转到 >= Android 11 的范围存储。

希望这个解决方案可以帮助某人。

于 2020-08-27T11:31:00.803 回答