Android调用Camera
调用系统相机或者是具有相机功能的App
调用系统相机
Intent intent =
new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri photoUri = Uri.fromFile(
new File(filePath);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, requestCode);
调用具有相机功能的App
<activity>
<intent-filter>
<action android:name=
"android.media.action.IMAGE_CAPTURE"/>
<category android:name=
"android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
获取拍摄图片
@Override
protected void onActivityResult(
int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK && requestCode ==
100){
if(data !=
null){
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get(
"data");
}
}
}
自定义相机
使用SurfaceView组件来显示相机内容。打开Camera,并且try catch设置为空。mCamera.open();每次操作Camera的时候判断是否为空。Camera的使用要与Activity的生命周期绑定,如onDestory()、onPause()。
if(mCamera !=
null){
mCamera.setPreviewCallback(
null);
mCamera.stopPreview();
mCamera.replease();
mCamera =
null;
}
使用SurfaceView拿到SurfaceHolder对象,并且实现SurfaceHolder.Callback接口,并且重写方法。
SurfaceHolder对象。mSurfaceHolder = mSurfaceView.getHolder();设置回调。mSurfaceHolder.addCallback(this);实现接口。
@Override
public void surfaceCreated(SurfaceHolder holder) {
if(mCamera !=
null && mSurfaceHolder !=
null){
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.setDisplayOrientation(
90);
mCamera.startPreview();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format,
int width,
int height) {
mCamera.stopPreview();
if(mCamera !=
null && mSurfaceHolder !=
null){
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.setDisplayOrientation(
90);
mCamera.startPreview();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(mCamera !=
null){
mCamera.setPreviewCallback(
null);
mCamera.stopPreview();
mCamera.replease();
mCamera =
null;
}
}
预览相机。
if(mCamera !=
null && mSurfaceHolder !=
null){
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.setDisplayOrientation(
90);
mCamera.startPreview();
}
添加权限 <users-permission android:name="android.permission.CAMERA" />
注意
使用Camera的时候,导入的包要到hardware的,而不是graphics的。Android 5.0后新增了具有高级功能的Camera2。
转载请注明原文地址: https://ju.6miu.com/read-678089.html