通过onActivityResult的意图传递数据



我试图将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没有这个选项,抱歉。

最新更新