Android 在广播接收器中异步拍照

标签 android broadcastreceiver android-camera intentservice

我已经为上述问题苦苦挣扎了一段时间,所以非常感谢任何答案。

首先,我的主要目标是在收到 Intent 时拍照(在广播接收器内)。 我已经尝试了很多上述方法但无济于事。 以下(为了视觉清晰度显示相关代码 fragment )代码说明了一种方法:

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);

但是,当我收到 Intent 时,应用程序崩溃了。我觉得这背后的原因是拍照可能需要在广播接收器内部完成太多工作。 (我使用一个按钮通过简单的图片捕获测试了此功能,并且效果很好。)

因此,我尝试的第二种方法是创建一个 Intentservice,它会在收到 intent 时处理拍照(以及存储图片等其他相关任务)。

服务的 onHandleIntent(Intent intent) 方法现在将具有 this.mCameraView.takePicture(filename) 函数。但是,我需要使用 Intent 将我的 CameraView 类作为对象传递给此服务。为此,我创建了一个 Serializable 类并尝试使用 intent 的 putExtra 方法传递它。几次崩溃后,我意识到 CameraView 类不可序列化(它在 FrameLayout 中显示相机预览)。

我想到执行上述操作的另一种方法是在新服务中创建 cameraView 对象本身,但为此我需要上下文和对主要 Activity 的引用——我认为这不能使用 Intent 传递。 这留下了开始新 Activity 以在广播接收器内拍照的选项 - 看起来又做了太多工作。 正如我之前所说,我已经尝试了几种方法,但都没有取得成功。我个人认为这不会成为这样的问题。我真的很感激并非常感谢任何回答者。

最佳答案

我不是 100% 确定您要尝试做什么,但听起来您想在收到广播时触发某些事情(拍照)?

为此,您可以在主 Activity 中创建一个处理程序,然后在收到广播时向其发送一条消息。你的 Activity 中有这样的东西。

Handler myHandler = new Handler() {
        @Override 
        public void handleMessage(Message msg) {
                        takePicture();
                    }
});

broadcastReceiver = new YourReceiverClass(myHandler);

intentFilter = new IntentFilter(
            "your_package_name.YourReceiverClass");
    registerReceiver(broadcastReceiver, intentFilter);

接收器中有类似这样的东西

private Handler handler;
public YourReceiverClass(Handler handler) {
    this.handler = handler;
}

public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    if (handler != null) {
            handler.sendEmptyMessage(0);
            }
}

关于Android 在广播接收器中异步拍照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553848/

相关文章:

android - 从android访问asp.net web api http服务

android - 事件监听器中的内存泄漏

android - 为什么我们可以通过BroadcastReceiver 与BLE 设备配对,而不显示系统Dialog?

android - 检测 Android 上已读的短信

react-native - 如何访问 Expo Camera 中的当前视频帧?

java - 我们可以制作一个用作计算机鼠标的 android 应用程序吗

java - 如何以编程方式在Android中制作水平线

android - 在 KITKAT 4.4.2 <ACTION_BOOT_COMPLETED><ActivityManagerService.java> 中串行处理的引导完成广播

android - 延长 Google Glass 中的视频录制时间

android - 我是否需要存储我的文件的路径,或者我可以简单地记下它们的存储类型吗?