我一直在努力与上述一段时间,所以真的很感谢任何答案。安卓在广播接收器内异步拍照
首先,我的主要目标是当我收到一个意图(在广播接收器内)时拍照。 我已经尝试了上述方法,但无济于事。 以下(表示相关的代码段的视觉清晰度)的代码说明了一种方法:
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类并尝试使用intent的putExtra方法传递它。几次崩溃后,我意识到CameraView类不是可序列化的(它在FrameLayout中显示相机预览)。
我想要做上述的另一种方法是在新服务中创建cameraView对象本身,但为此我需要上下文和对主要活动的引用 - 我不认为这可以通过intent传递。 这留下了开始一个新的活动,以在广播接收器内拍照的选项 - 再次看起来像做了太多的工作。 正如我之前所说,我已经尝试了一些方法,但没有取得任何成功。我个人认为它不会是这样的问题。我真的很感激,对任何回答者都非常感谢。
感谢NPN,这正是我想做的事 - 触发拍摄照片时,我收到了广播的情况发生。我会现在尝试上述解决方案,如果它有效(或不),请再次评论。 – Abhi
嗨npn,我试过上述解决方案。然而,应用程序崩溃拍照。我het以下错误信息:java.lang.RuntimeException:takePicture失败,在 android.hardware.Camera.native_takePicture(本地方法)在 android.hardware.Camera.takePicture(相机。 java:948)。任何建议都是为什么会发生这种情况,或者如何去调试它。 – Abhi
我在调试方面远非专家,但对于我来说,当我获得追溯时,我会回顾消息,直到找到来自我的代码的调用。举例来说,我把你刚才发布的内容映射到回溯消息的顶部?如果这样看下去,并试图找到代码中的哪个语句触发了这个回溯。然后你可以在调试器中设置一个断点或者使用Log.d(“myTag”,“一些有用的信息”); – nPn