首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待Camera.PictureCallback

等待Camera.PictureCallback
EN

Stack Overflow用户
提问于 2016-02-21 16:10:00
回答 1查看 2.4K关注 0票数 4

设想情况:

我有一个活动(A),它调用另一个活动(B)来拍照并将Byte[]发送回'A‘。

为了拍照,活动B有一个按钮:

代码语言:javascript
复制
public void onClick(View v) {
            //get the current image from the camera
            mCamera.takePicture(null, null, mPicture);
            Intent data1 = new Intent();
            data1.putExtra("byte_array",dataPic);
            if (getParent() == null) {
                setResult(Activity.RESULT_OK, data1);
            } else {
                getParent().setResult(Activity.RESULT_OK, data1);
            }
            finish();

        }

这是我的PictureCallback:

代码语言:javascript
复制
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
        if (pictureFile == null){
            Log.d(TAG, "Error creating media file, check storage permissions: " +
                    "no exception written by a boss");
            return;
        }

        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();
            dataPic = data;

        } catch (FileNotFoundException e) {
            Log.d(TAG, "File not found: " + e.getMessage());
        } catch (IOException e) {
            Log.d(TAG, "Error accessing file: " + e.getMessage());
        }

        mCamera.stopPreview();
        mCamera.release();

    }
};

我用startActivityForResult启动了活动B,在活动A中实现了onActivityResult

问题:

我通过代码进行了调试,并注意到onActivityResultonPictureTaken调用之前就被调用了。因此,逻辑上Byte[]是空的:(

我还尝试将onClick函数中的代码添加到onPictureTaken函数中(当然没有mCamera.takePicture),但没有效果,仍然为空。

也许我没看到什么很明显的东西,但我就是找不到解决办法。我试着在这里找一个合适的问题,但找不到任何有用的东西。

问题:

有什么办法等电话回来吗?或者是另一种解决问题的方法?

附带说明:

请不要建议使用相机意图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-21 16:18:17

我通过代码进行了调试,并注意到onActivityResult在onPictureTaken调用之前就被调用了。因此,逻辑上Byte[]是空的。

这是因为takePicture()是异步的。

我还尝试将onClick函数中的代码添加到onPictureTaken函数中(当然没有mCamera.takePicture),但没有效果,仍然为空。

嗯,关于处理异步问题,这个问题是正确的答案。但是,除非您选择了一个小的分辨率,否则您的Intent将太大,当您试图返回结果时,您应该会崩溃。

有什么办法等电话回来吗?

不是的。

或者是另一种解决问题的方法?

关于"Intent太大“的问题,没有两个活动。有一个活动,使用两个片段或一些类似的方法在两种状态之间更改UI。

关于异步问题,请将流程结果逻辑移到onPictureTaken(),在mCamera.release()之后。在此过程中,摆脱dataPic (因为您不再需要它),并使用data (传入的byte[])。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35538448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档