这个问题的解决方法是,我们需要使用ActivityResultLauncher
以下是一份示例代码,用于创建PDF文件并在Android设备上保存它:
// 创建PDF时需要使用的参数
private static final String FILE_NAME = "example.pdf";
private static final int REQUEST_CODE_CREATE_DOCUMENT = 1;
private static final String MIME_TYPE_PDF = "application/pdf";
// 创建ActivityResultLauncher实例
private final ActivityResultLauncher createDocumentLauncher = registerForActivityResult(
new ActivityResultContracts.CreateDocument(),
new ActivityResultCallback() {
@Override
public void onActivityResult(Uri uri) {
// 在这里执行保存PDF文件的操作
}
});
// 在需要创建PDF文件的地方调用此方法
public void createPDF() {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.setType(MIME_TYPE_PDF);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(Intent.EXTRA_TITLE, FILE_NAME);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
createDocumentLauncher.launch(FILE_NAME);
}
这里的createDocumentLauncher是使用ActivityResultContracts.CreateDocument()创建的。注意,我们在创建Intent对象时添加了一些标志,以确保正确创建PDF文件。最后,在onActivityResult()方法中,我们可以执行保存PDF文件的操作,例如使用OutputStream将内容写入URI。
上一篇:ActivityResultContracts.TakePicture返回“找不到文件或目录”。
下一篇:ActivityResultLauncher<Intent>的requestCode不能超过16位。