设想情况:
我有一个活动(A),它调用另一个活动(B)来拍照并将Byte[]发送回'A‘。
为了拍照,活动B有一个按钮:
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:
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。
问题:
我通过代码进行了调试,并注意到onActivityResult在onPictureTaken调用之前就被调用了。因此,逻辑上Byte[]是空的:(
我还尝试将onClick函数中的代码添加到onPictureTaken函数中(当然没有mCamera.takePicture),但没有效果,仍然为空。
也许我没看到什么很明显的东西,但我就是找不到解决办法。我试着在这里找一个合适的问题,但找不到任何有用的东西。
问题:
有什么办法等电话回来吗?或者是另一种解决问题的方法?
附带说明:
请不要建议使用相机意图。
发布于 2016-02-21 16:18:17
我通过代码进行了调试,并注意到onActivityResult在onPictureTaken调用之前就被调用了。因此,逻辑上Byte[]是空的。
这是因为takePicture()是异步的。
我还尝试将onClick函数中的代码添加到onPictureTaken函数中(当然没有mCamera.takePicture),但没有效果,仍然为空。
嗯,关于处理异步问题,这个问题是正确的答案。但是,除非您选择了一个小的分辨率,否则您的Intent将太大,当您试图返回结果时,您应该会崩溃。
有什么办法等电话回来吗?
不是的。
或者是另一种解决问题的方法?
关于"Intent太大“的问题,没有两个活动。有一个活动,使用两个片段或一些类似的方法在两种状态之间更改UI。
关于异步问题,请将流程结果逻辑移到onPictureTaken(),在mCamera.release()之后。在此过程中,摆脱dataPic (因为您不再需要它),并使用data (传入的byte[])。
https://stackoverflow.com/questions/35538448
复制相似问题