我试图将pdf文件保存在用户选择的位置,但我有问题通过意图传递数据。
我尝试使用一个bundle来传递信息,但它总是空的。它只有在我添加一个局部变量并在@save方法中赋值时才有效。但是我想通过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();
}
}
});`
有什么建议吗?我不知道我在这里错过了什么,我一直在敲我的头在这个几个小时,不能让它工作。任何帮助都非常感谢!
intent.putExtra("bytes", bytes);
在这里,您正在将Intent
额外传递给您正在启动的活动。该活动是响应ACTION_CREATE_DOCUMENT
的设备提供的活动。
更重要的是,这不是你的活动。它当然不是为Intent
调用launch()
的活动。
因此,bytes
额外将可用于ACTION_OPEN_DOCUMENT
活动。该活动将忽略额外的。它将不包括额外的完全不同的Intent
,交付给您的onActivityResult()
方法。
但是我想通过intent传递它。
Android没有这个选项,抱歉。