从MediaStore.EXTRA_OUTPUT intent获取文件

时间:2017-01-09 23:22:41

标签: android

我使用名为takePicture的函数拍摄图像并将其存储到文件中。然后我将该文件传递给intent。我无法弄清楚如何从onActivityResult中的意图中获取文件。 Android文档说

  

接收内容URI的客户端应用程序可以打开文件   通过调用ContentResolver.openFileDescriptor来访问其内容   得到一个ParcelFileDescriptor。

我根本不知道如何实现它。

public void takePicture(View view) {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    file = FileProvider.getUriForFile(FallingActivity.this,   this.getApplicationContext().getPackageName() + ".provider", getOutputMediaFile());

    intent.putExtra(MediaStore.EXTRA_OUTPUT, file);

    startActivityForResult(intent, RESULT_TAKE_PHOTO);
}

以下是我设置onActivityResult的方法。我的最终目标是从onActivityResult中的意图中获取文件并将其转换为Uri,以便将其传递给Adobe的Aviary编辑器。目前,当Adobe Aviary编辑器加载时,我收到一条消息,说“#34;下载图像时出错”#34;。任何人都可以帮我找出原因吗?

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_TAKE_PHOTO && resultCode == RESULT_OK && data != null) {

            Intent intent = new Intent(Intent.ACTION_VIEW);

            Uri selectedImage = FileProvider.getUriForFile(FallingActivity.this, this.getApplicationContext().getPackageName() + ".provider", getOutputMediaFile());

            Intent imageEditorIntent = new AdobeImageIntent.Builder(this)
                .setData(selectedImage)
                .build();

        imageEditorIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

        startActivityForResult(imageEditorIntent, RESULT_AVIARY_EDIT);

        } 
    }

2 个答案:

答案 0 :(得分:1)

  

我无法弄清楚如何从onActivityResult的意图中获取文件

没有文件可以从<table border="0" cellspacing="1" cellpadding="1" width="400" height="300"> <tr> <td width="50%"> <div id="left_div"> </br> </br> </br> </br> <a class="tditems_tooltip"> <font color="red">TRIGGER</font> <span> <table border="0" cellspacing="0" cellpadding="1" width="300"> <tr bgcolor="green"> <td>CONTENT OF TOOLTIP</td> </tr> </table> </span> </a> </br> </br> </br> </br> </br> </br> </br> </br> </div> </td> <td width="50%">INSIGNIFICANT CONTENT</td> </tr> </table>中获取。当您提供Intent时,ACTION_IMAGE_CAPTURE不会返回任何内容,除了确定/取消状态。

你知道这张照片应该在哪里。它是EXTRA_OUTPUT的结果。您需要保留该值,例如通过活动或片段上的字段。请务必将其保存在配置更改中,例如通过已保存的实例状态getOutputMediaFile()

答案 1 :(得分:-1)

我可能迟到提供解决方案了。

EXTRA_OUTPUT extra不会返回任何数据。.因此,onActivityResult方法(data!= null)中的检查将不起作用,因为该数据始终为null相反,您可以像EXTRA_OUTPUT一样进行其余的检查(检查请求和结果代码)。

希望它对某人有所帮助。