我正在尝试拍照但是当调用takePicture时它会挂起。没有异常生成。我的代码运行在一个AsyncTask中,它是从服务中提取的。没有使用任何活动,也不必使用任何活动。我在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)
{
}
}
清单:
<?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>
答案 0 :(得分:1)
你需要在拍照前调用this.camera.startPreview(),然后调用stopPreview()。 此外,如果您调用release,正如您在示例中所做的那样,您的回调将永远不会被执行
答案 1 :(得分:0)
camera.takePicture无法通过后台线程调用必须通过主线程