Android Camera.PictureCallback拍照后停止预览
使用安卓API 16设备拍照后,预览停止工作,但当我使用安卓API 22设备时,应用程序工作正常 我有拍照的密码Android Camera.PictureCallback拍照后停止预览,android,camera,Android,Camera,使用安卓API 16设备拍照后,预览停止工作,但当我使用安卓API 22设备时,应用程序工作正常 我有拍照的密码 private Camera.PictureCallback mPicture = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { if (fotofile == null){ Log.d(TAG, "Erro
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
if (fotofile == null){
Log.d(TAG, "Erro ao criar arquivo de mídia, verificar permissões de usuário ");
return;
}
try {
FileOutputStream fos = new FileOutputStream(fotofile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "Error accessing file: " + e.getMessage());
}
}
})
该代码由以下代码调用:
btnFoto = (Button) findViewById(R.id.btnFoto);
btnFoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fotofile = new File(dir, "foto_" +System.currentTimeMillis()+ ".jpg");
if (pressed)
return;
pressed = true;
mCamera.autoFocus(new Camera.AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
mCamera.takePicture(null, null, mPicture);
mToast("Foto Capturada!");
pressed = false;
shootSound();
}
});
}
});
我的舱单
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
使用时发生错误
mCamera.startPreview(); // After take a picture
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: startPreview failed
at android.hardware.Camera.startPreview(Native Method)
at centranet.com.br.cameratalao.MainActivity$2$1.onAutoFocus(MainActivity.java:122)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:824)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(Native Method)
我在Nexus手机(安卓5.1版)上也遇到了同样的问题 拍照后,它会停止预览,而在三星note 3(Android 5.0版)中,它会继续显示预览。 我把这个修好了
onPictureTaken(byte[] data, Camera camera) {
mCamera.startPreview();
mCamera.startFaceDetection();
.
.
.
}
你需要重新开始人脸检测。我不知道为什么它在再次启动预览后会停止。拍照后,您总是需要自己重新启动预览。我不知道这在Android 5.2中已经改变了。它可以工作@重写公共void onPictureTaken(byte[]data,Camera-Camera){mCamera.startPreview();我有两个设备,一个自己重新启动预览,另一个什么也不做。再次调用startPreview就可以了
onPictureTaken(byte[] data, Camera camera) {
mCamera.startPreview();
mCamera.startFaceDetection();
.
.
.
}