- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 google vision api 构建一个具有二维码扫描仪的应用程序。读取二维码后我无法停止相机。流程是 MainActivity -> QrActivity
一旦二维码收到检测,应用程序应返回主 Activity 。
如果我不调用 cameraSource.release()
它工作正常,但设备会发热很多并且对电池消耗有很大影响。但是,如果我释放相机源,mainActivity 将变得无响应,应用程序将崩溃。
为什么它变得无响应?释放相机源的正确位置在哪里?
QrActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qr);
cancelBtn = (Button) findViewById(R.id.cancel_button);
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
new QrReader(this);
}
QrReader 类
public class QrReader {
private static final String TAG = "QrReader";
private SurfaceView cameraView;
private TextView barcodeInfo;
private BarcodeDetector barcodeDetector;
private CameraSource cameraSource;
private Activity mActivity;
private AccessPointCredentials barCodeData;
public QrReader(Activity activity) {
this.mActivity = activity;
cameraView = (SurfaceView) mActivity.findViewById(R.id.camera_view);
barcodeInfo = (TextView) mActivity.findViewById(R.id.code_info);
barcodeDetector =
new BarcodeDetector.Builder(mActivity)
.setBarcodeFormats(Barcode.QR_CODE)
.build();
cameraSource = new CameraSource
.Builder(mActivity, barcodeDetector)
.setAutoFocusEnabled(true)
.build();
cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
cameraSource = new CameraSource
.Builder(mActivity, barcodeDetector)
.setAutoFocusEnabled(true)
.setFacing(0)
.build();
try {
cameraSource.start(cameraView.getHolder());
} catch (Exception ioe) {
ioe.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// Log.i(TAG, "surfaceDestroyed: stopping camera Source");
// cameraSource.release();
}
});
barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
@Override
public void release() {
Log.i(TAG, "release: ");
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> barCodes = detections.getDetectedItems();
if (barCodes.size() != 0) {
Log.i(TAG, "received a Barcode");
barcodeInfo.post(new Runnable() { // Use the post method of the TextView
public void run() {
barcodeInfo.setText(barCodes.valueAt(0).displayValue);
}
});
Gson g = new Gson();
try {
barCodeData = g.fromJson(barCodes.valueAt(0).rawValue, AccessPointCredentials.class);
} catch (Exception e) {
barCodeData = new AccessPointCredentials();
barCodeData.setSsid(barCodes.valueAt(0).rawValue);
barCodeData.setPass(null);
e.printStackTrace();
}
connectToWifi(barCodeData);
// CameraSource.release causes app to freeze
// cameraSource.release();
}
}
});
}
private void connectToWifi(final AccessPointCredentials credentials) {
//wificonnect code
}
}
最佳答案
已经 3 个月了,但我偶然发现了同样的问题并解决了这个问题。 receiveDetections 方法中的代码在不同的线程上运行,所以如果你想做一些需要 ui 线程的事情,你需要从处理程序发布它:
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
cameraSource.release();
}
});
关于java - Android cameraSource.stop() 导致应用程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39641111/
我有两个安卓设备。 CameraSource 对他们的工作方式不同。对于一台设备,照片的方向在保存后没有旋转是正确的。但是对于另一台设备,保存的照片方向错误。 我已经创建了 CameraSource:
当我想使用相机拍照时,CameraSource 出现了一些问题。我想要的只是用我在 xml 文件上制作的按钮拍照并使用“CameraSource”拍照,因为我也在使用“TextRecognizer”。
我正在实现 google-vision face tracker 中给出的示例.MyFaceDetector 类: public class MyFaceDetector extends Detect
我正在使用视觉 API 来跟踪人脸。我根据面部位置应用了一个蒙版。当我从前置摄像头拍照时,我调用 camerasource.takePicture() 来保存图像。我在某些设备(如三星)中面临图像旋转
我一直在关注以下tutorial ,它使用移动视觉 api 创建条形码/二维码扫描仪。虽然我已经输入了它所说的确切代码(至少我认为),但来自 cameraSource 的摄像头馈送。 我在这个过程中添
我正在使用 google vision api 构建一个具有二维码扫描仪的应用程序。读取二维码后我无法停止相机。流程是 MainActivity -> QrActivity一旦二维码收到检测,应用程序
我使用 Vision API 扫描条码。几乎完成了,除了自动对焦。我遵循此链接中的指南:https://developers.google.com/android/reference/com/goog
背景:我正在实现一个 mask 来帮助人们聚焦他们的相机并在每张照片上产生统一的结果。可悲的是, mask 需要在前后摄像头之间切换时调整其大小,以便为人们提供很好的指导。 问题:我一直在尝试检测相机
我正在开发一个 android 应用程序,它允许用户检查 QR 码内容并根据读取结果执行某些操作。 为了提高性能,我想实现两种方法: onClickFocus(允许用户在点击屏幕时对焦相机) 打开/关
我有一个初始化条形码检测的 Activity 。然后我转到另一个 Activity ,当我按下后退按钮时,它会触发此异常的循环: com.example.myapp E/CameraSource: E
我正在尝试开发一个带有人脸检测功能的简单相机应用程序,我正在使用这里的 android-vision 示例 https://github.com/googlesamples/android-visio
现在,我们的应用程序正在成功运行 Snapdragon SDK。我们正在尝试在我们的项目中实现 Vision 8.3.0 中的 FaceDetector,以增加兼容设备的数量。我们不能使用 Camer
我已从此处查看最新的 Google Vision API: https://github.com/googlesamples/android-vision 我在带有 KitKat 的 LG G2 设备
基于 Google Vision Face Tracker 的面部追踪器应用程序.默认情况下,Face Tracker 使用后置/后置摄像头,但我想使用前置摄像头检测人脸。 这是google visi
移动视觉API中的setRequestedFps是什么意思。 相机代码: mCameraSource = new CameraSource.Builder(getApplica
这个问题是关于使用 Google's Mobile Vision Face API在 Android 上。 故事(背景)和我想做的事 我正在尝试实现一个功能,该功能可以检测相机 View 中的人脸,并
我必须在 Google Vision API 的 CameraSource 中实现来构建相机并在捕获图像之前进行面部检测。现在我遇到了一些问题,所以我需要从 CameraSource 访问相机对象。
我正在尝试抓取相机捕获的帧,对它们进行编码,最后使用 RTP/RTSP 发送它们。 为了进行捕捉,我使用了 stagefright 的 CameraSource 类。屏幕上的预览(从 Java 传递的
下面是我的条形码扫描器 Activity ,除了 setAutoFocusEnabled(true) 之外一切正常。它在运行时返回一条消息,指出我的设备不支持自动对焦,尽管 Samsung Tab E
我是一名优秀的程序员,十分优秀!