我试图保存一个pdf文件在用户选择的位置,但我有问题,通过意图传递数据。
我尝试使用bundle来传递信息,但它总是null。只有当我添加一个局部变量并在@保存方法中赋值时,它才起作用。但我想通过Intent传递它。
事情是我不会进入另一个活动,只是选择一个目录,我回来了。
`protected void save(byte[] bytes, String fileName, String mimeType) {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.setType(mimeType);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(Intent.EXTRA_TITLE, fileName);
intent.putExtra("bytes", bytes);
activityResultLaunch.launch(intent);
}`
`ActivityResultLauncher<Intent> activityResultLaunch = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
Intent data = result.getData();
try {
Uri uri = data.getData();
OutputStream outputStream = getContext().getContentResolver().openOutputStream(uri);
// here it is always null
//byte[] bytes = data.getByteArrayExtra("bytes");
outputStream.write(bytes);
outputStream.close();
Toast.makeText(getContext(), "Successfully saved document to device!", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(getContext(), "Failed to save document to device.", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
});`
有什么建议吗?我不知道我错过了什么,我一直在撞我的头上这几个小时,无法让它工作。任何帮助都非常感谢!
1条答案
按热度按时间jk9hmnmh1#
在这里,您要向要启动的Activity传递一个
Intent
extra。该Activity是设备提供的Activity,它响应ACTION_CREATE_DOCUMENT
。更重要的是,它不是您的Activity,当然也不是为
Intent
调用launch()
的Activity。因此,
bytes
extra将可用于ACTION_OPEN_DOCUMENT
活动。该活动将忽略该extra。它不会将该extra包含在交付给onActivityResult()
方法的 * 完全不同的 *Intent
中。但是我想通过意图传递它。
抱歉,Android中没有此选项。