安卓:takePicture 挂起

标签 android camera

我正在尝试拍照,但在调用 takePicture 时照片挂起。不会产生异常。我的代码在从服务启动的 AsyncTask 中运行。未使用任何 Activity ,也不得使用任何 Activity 。我在 Android 2.3.6 上运行这个。我可以等几分钟,永远不会调用 onPictureTaken。

代码:

import android.annotation.SuppressLint;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.AsyncTask;
import android.os.Build;

public class CameraAsyncTask extends AsyncTask<Void, Void, Boolean> implements Camera.PictureCallback
{
  private Camera camera;

  @Override
  protected Boolean doInBackground(Void... params)
  {
    this.camera = Camera.open();
    this.camera.takePicture(null, null, (PictureCallback) this);
    this.camera.release();
  }

  @Override
  protected void onPostExecute(Boolean succeeded)
  {
  }

  public void onPictureTaken(byte[] data, Camera camera)
  {
  }
}

list :

<?xml version="1.0" encoding="utf-8"?>
<manifest>

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.camera.autofocus"
        android:required="false" />

</manifest>

最佳答案

您需要在拍照前调用 this.camera.startPreview() ,然后在拍照后调用 stopPreview() 。 此外,如果您调用 release,就像您在示例中所做的那样,您的回调将永远不会执行

关于安卓:takePicture 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14254519/

相关文章:

c# - 如何将实例化的对象传递给相机

android - 我需要创建 Android 键盘应用程序,但有些类已弃用

objective-c - 后台实时摄像头(ios)

android - Cordova 3.3.1-0.1.2 (Phonegap) 插件不工作

android - 如何实现垂直滑动操作栏(如grofers app)

ios - 是否可以通过编程方式提高 iphone 中相机的快门速度?

javascript - 如何用键盘和鼠标同时控制相机 - three.js

android - .takePicture 上的相机错误 100 仅在停止视频录制后

android - 在 Nokia 6.2 Android 9 上找不到处理 Intent android.intent.action.OPEN_DOCUMENT_TREE 的 Activity

android - 如何更改导航 Controller 中目的地的标签属性?