我已经在上述问题上苦苦挣扎了一段时间,所以非常感谢任何答案。
首先,我的主要目标是在收到意图(在广播接收器内)时拍照。我已经尝试了很多上述方法,但无济于事。以下(显示相关代码片段以使视觉清晰)代码说明了一种方法:
public class ArduinoReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
takePictureUsingCamera();
} }
函数 takePictureUsingCamera() 调用处理相机的类中的函数(例如,在 FrameLayout 中显示相机预览)。具体函数调用android中的android takePicture函数:this.mPreview.mCamera.takePicture(null, null, this.mPicture);
但是,当我收到意图时,应用程序崩溃了。我觉得这背后的原因是拍照可能要求在广播接收器内完成太多工作。(我用一个简单的按钮图片捕捉测试了这个功能,它工作得很好。)
因此,我尝试的第二种方法是创建一个 Intentservice,它会在收到意图时处理拍照(以及其他相关任务,如存储图片)。
Service 的 onHandleIntent(Intent intent) 方法现在将具有 this.mCameraView.takePicture(filename) 函数。但是,我需要使用意图将我的 CameraView 类作为对象传递给该服务。为此,我创建了一个 Serializable 类并尝试使用意图的 putExtra 方法传递它。几次崩溃后,我意识到 CameraView 类不可序列化(它在 FrameLayout 中显示相机预览)。
我想到的另一种方法是在新服务中创建 cameraView 对象本身,但为此我需要上下文和对主要活动的引用——我认为不能使用意图传递。这留下了启动新活动以在广播接收器内拍照的选项 - 再次看起来做太多工作。正如我之前所说,我尝试了一些方法,但都没有取得成功。我个人认为不会有这么大的问题。我真的很感激并非常感谢任何回答者。