0

我设法构建了一个简单但有效的自定义相机应用程序。到目前为止,我可以直接启动它并让它拍照。我还添加了适当的意图过滤器,将其作为可用应用程序发布,以回复另一个应用程序的意图调用,其中包含如下代码行:Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

问题是:如何编码我的相机应用程序以将图像发送回传递 URI 进行保存的外部应用程序?

目前我有一个方法可以检测相机是直接启动还是调用来回复意图过滤器:这个方法是isImageCaptureIntent(工作)。

我想我必须在onPictureTaken方法中写一些东西,PictureCallback但是一旦我尝试写入 OutputStrems,所有尝试都会在 NullPointerExceptions 中停止。

请注意,mSaveUri这行代码中已经填充了调用应用程序提供的正确 URI:mSaveUri = (Uri) myExtras.getParcelable( MediaStore.EXTRA_OUTPUT );

这是方法:

 PictureCallback myPictureCallback_JPG = new PictureCallback() {

    @Override
    public void onPictureTaken(final byte[] arg0, Camera arg1) {);

        if (isImageCaptureIntent()) {

            if (mSaveUri != null) {
                OutputStream outputStream = null;
                try {
                    outputStream = getContentResolver()
             .openOutputStream(mSaveUri);  <== HERE I GET NullPointerException
                    outputStream.write(arg0);
                    outputStream.close();
                    setResult(RESULT_OK);
                    finish();
                } catch (IOException ex) {
                    // ignore exception
                } finally {
                }
            } 
        }
        camera.startPreview();
    }
};
4

2 回答 2

0

这个问题也有类似的问题。一篇帖子说这是 HTC 设备上的问题。这里:

无论如何,我建议发送请求以捕获图像,并接收到它的路径,并使用 MODE_WORLD_READABLE 作为文件,或使用外部存储路径。

于 2012-05-17T19:45:01.677 回答
0
       mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, opt);

        Matrix mtrxFreeze = new Matrix();
        mtrxFreeze.postRotate(90);

        mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(),
                mBitmap.getHeight(), mtrxFreeze, true);
于 2013-11-22T06:34:42.993 回答