You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(compileSdk=32):将PDF字节数组存至公共Downloads目录的最简方案

最简实现:将PDF字节数组存储到公共Downloads目录

MediaStore 完全支持存储PDF这类非媒体文件,无需担心兼容性问题。下面是直接利用MediaStore将字节数组写入公共Downloads目录的最简实现:

核心思路

通过MediaStore的Downloads集合创建文件条目,获取可写入的输出流后直接写入PDF字节数组,无需手动处理文件路径或复杂的权限适配(Android 10+)。

Kotlin 实现代码

fun savePdfToDownloads(context: Context, pdfBytes: ByteArray, fileName: String) {
    val contentValues = ContentValues().apply {
        put(MediaStore.Downloads.DISPLAY_NAME, fileName)
        put(MediaStore.Downloads.MIME_TYPE, "application/pdf")
        put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS)
    }

    val uri = context.contentResolver.insert(
        MediaStore.Downloads.EXTERNAL_CONTENT_URI,
        contentValues
    ) ?: return

    context.contentResolver.openOutputStream(uri)?.use { outputStream ->
        outputStream.write(pdfBytes)
    }
}

Java 实现代码

public void savePdfToDownloads(Context context, byte[] pdfBytes, String fileName) {
    ContentValues contentValues = new ContentValues();
    contentValues.put(MediaStore.Downloads.DISPLAY_NAME, fileName);
    contentValues.put(MediaStore.Downloads.MIME_TYPE, "application/pdf");
    contentValues.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);

    Uri uri = context.getContentResolver().insert(
            MediaStore.Downloads.EXTERNAL_CONTENT_URI,
            contentValues
    );
    if (uri == null) return;

    try (OutputStream outputStream = context.getContentResolver().openOutputStream(uri)) {
        if (outputStream != null) {
            outputStream.write(pdfBytes);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

注意事项

  • 调用时确保文件名包含.pdf后缀,避免系统无法识别文件类型
  • Android 9(API 28)及以下设备,需在Manifest中添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,并动态申请该权限
  • Android 10(API 29)及以上无需申请存储权限,系统通过MediaStore自动处理存储访问

内容的提问来源于stack exchange,提问作者Waldmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:30:05