问题描述
嗨,我正在用表面视图拍照。拍照可在所有版本中使用,但android pie除外在android pie中拍照时出错。任何人都可以帮助解决我的问题。这是我的代码。
CameraPreview.java
public class CameraPreview extends SurfaceView implements
SurfaceHolder.Callback {
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;
// Constructor that obtains context and camera
@SuppressWarnings("deprecation")
public CameraPreview(Context context,Camera camera) {
super(context);
this.mCamera = camera;
this.mSurfaceHolder = this.getHolder();
this.mSurfaceHolder.addCallback(this);
this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
if(mCamera == null) return;
try {
if(mCamera != null) {
mCamera.setPreviewdisplay(surfaceHolder);
mCamera.startPreview();
}
} catch (IOException e) {
// left blank for Now
}
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder,int format,int width,int height) {
try {
Camera.Parameters parameters = mCamera.getParameters();
mCamera.setParameters(parameters);
mCamera.startPreview();
/* this.mCamera.setPreviewdisplay(surfaceHolder);
this.mCamera.startPreview();*/
} catch (Exception e) {
}
}
}
ManiActivity.java
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback,Camera.PictureCallback {
private SurfaceHolder surfaceHolder;
private Camera camera;
public static final int REQUEST_CODE = 100;
private SurfaceView surfaceView;
private String[] neededPermissions = new String[]{CAMERA,WRITE_EXTERNAL_STORAGE};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preview = (FrameLayout) findViewById(R.id.camera_preview);
currentCameraId = Camera.CameraInfo.CAMERA_FACING_FRONT;
mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
mCameraPreview = new CameraPreview(mContext,mCamera);
preview.addView(mCameraPreview);
mSurface = new SurfaceTexture(123);
Camera.Parameters params = mCamera.getParameters();
int angle = 0;
if (cameraMode.equals("back")) {
} else {
angle = 270;
}
if (autoFocusSupported(mCamera)) {
params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
} else {
Log.w(TAG,"Autofocus is not supported");
}
mCamera.setParameters(params);
mCamera.setPreviewCallback(MainActivity.this);
mCamera.setErrorCallback(MainACtivity.this);
mCamera.startPreview();
captureImage();
}
public void captureImage() {
if (camera != null) {
camera.takePicture(null,null,this);
}
}
@Override
public void onPictureTaken(byte[] bytes,Camera camera) {
我在camera.takepicture中遇到错误,我无法捕获图像。仅在android 9版本中
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)