android 通过Intent为onActivityResult传递数据

r6hnlfcb  于 2023-01-19  发布在  Android
关注(0)|答案(1)|浏览(144)

我试图保存一个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();
                }
            }
        });`

有什么建议吗?我不知道我错过了什么,我一直在撞我的头上这几个小时,无法让它工作。任何帮助都非常感谢!

jk9hmnmh

jk9hmnmh1#

intent.putExtra("bytes", bytes);

在这里,您要向要启动的Activity传递一个Intent extra。该Activity是设备提供的Activity,它响应ACTION_CREATE_DOCUMENT
更重要的是,它不是您的Activity,当然也不是为Intent调用launch()的Activity。
因此,bytes extra将可用于ACTION_OPEN_DOCUMENT活动。该活动将忽略该extra。它不会将该extra包含在交付给onActivityResult()方法的 * 完全不同的 * Intent中。
但是我想通过意图传递它。
抱歉,Android中没有此选项。

相关问题