日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android surfaceview camera,android – 如何在SurfaceView上显示相机预览?

發(fā)布時(shí)間:2025/3/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android surfaceview camera,android – 如何在SurfaceView上显示相机预览? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

要使用Camera2 API從相機(jī)顯示預(yù)覽,您應(yīng)該執(zhí)行以下步驟:

>獲得使用相機(jī)設(shè)備的權(quán)限

>使用CameraManager打開與相機(jī)的連接

準(zhǔn)備表面預(yù)覽

>使用打開的相機(jī)設(shè)備和所需的曲面(它不僅可以包括預(yù)覽曲面)創(chuàng)建CaptureSession

> CaptureSession創(chuàng)建后,您需要創(chuàng)建并配置CaptureRequest并將其提交給CaptureSession

需要注意的是,準(zhǔn)備表面和打開連接到相機(jī)是獨(dú)立的過程,所以您需要確保它們都是在創(chuàng)建CaptureSession之前完成的.

以下是在屏幕上顯示相機(jī)預(yù)覽的活動示例:

public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback,Handler.Callback {

static final String TAG = "CamTest";

static final int MY_PERMISSIONS_REQUEST_CAMERA = 1242;

private static final int MSG_CAMERA_OPENED = 1;

private static final int MSG_SURFACE_READY = 2;

private final Handler mHandler = new Handler(this);

SurfaceView mSurfaceView;

SurfaceHolder mSurfaceHolder;

CameraManager mCameraManager;

String[] mCameraIDsList;

CameraDevice.StateCallback mCameraStateCB;

CameraDevice mCameraDevice;

CameraCaptureSession mCaptureSession;

boolean mSurfaceCreated = true;

boolean mIsCameraConfigured = false;

private Surface mCameraSurface = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

this.mSurfaceView = (SurfaceView) findViewById(R.id.SurfaceViewPreview);

this.mSurfaceHolder = this.mSurfaceView.getHolder();

this.mSurfaceHolder.addCallback(this);

this.mCameraManager = (CameraManager) this.getSystemService(Context.CAMERA_SERVICE);

try {

mCameraIDsList = this.mCameraManager.getCameraIdList();

for (String id : mCameraIDsList) {

Log.v(TAG,"CameraID: " + id);

}

} catch (CameraAccessException e) {

e.printStackTrace();

}

mCameraStateCB = new CameraDevice.StateCallback() {

@Override

public void onOpened(CameraDevice camera) {

Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();

mCameraDevice = camera;

mHandler.sendEmptyMessage(MSG_CAMERA_OPENED);

}

@Override

public void onDisconnected(CameraDevice camera) {

Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();

}

@Override

public void onError(CameraDevice camera,int error) {

Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();

}

};

}

@Override

protected void onStart() {

super.onStart();

//requesting permission

int permissionCheck = ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA);

if (permissionCheck != PackageManager.PERMISSION_GRANTED) {

if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CAMERA)) {

} else {

ActivityCompat.requestPermissions(this,MY_PERMISSIONS_REQUEST_CAMERA);

Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();

}

} else {

Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();

try {

mCameraManager.openCamera(mCameraIDsList[1],mCameraStateCB,new Handler());

} catch (CameraAccessException e) {

e.printStackTrace();

}

}

}

@Override

protected void onStop() {

super.onStop();

try {

if (mCaptureSession != null) {

mCaptureSession.stopRepeating();

mCaptureSession.close();

mCaptureSession = null;

}

mIsCameraConfigured = false;

} catch (final CameraAccessException e) {

// Doesn't matter,cloising device anyway

e.printStackTrace();

} catch (final IllegalStateException e2) {

// Doesn't matter,cloising device anyway

e2.printStackTrace();

} finally {

if (mCameraDevice != null) {

mCameraDevice.close();

mCameraDevice = null;

mCaptureSession = null;

}

}

}

@Override

public boolean handleMessage(Message msg) {

switch (msg.what) {

case MSG_CAMERA_OPENED:

case MSG_SURFACE_READY:

// if both surface is created and camera device is opened

// - ready to set up preview and other things

if (mSurfaceCreated && (mCameraDevice != null)

&& !mIsCameraConfigured) {

configureCamera();

}

break;

}

return true;

}

private void configureCamera() {

// prepare list of surfaces to be used in capture requests

List sfl = new ArrayList();

sfl.add(mCameraSurface); // surface for viewfinder preview

// configure camera with all the surfaces to be ever used

try {

mCameraDevice.createCaptureSession(sfl,new CaptureSessionListener(),null);

} catch (CameraAccessException e) {

e.printStackTrace();

}

mIsCameraConfigured = true;

}

@Override

public void onRequestPermissionsResult(int requestCode,@NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode,grantResults);

switch (requestCode) {

case MY_PERMISSIONS_REQUEST_CAMERA:

if (ActivityCompat.checkSelfPermission(this,Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)

try {

mCameraManager.openCamera(mCameraIDsList[1],new Handler());

} catch (CameraAccessException e) {

e.printStackTrace();

}

break;

}

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

mCameraSurface = holder.getSurface();

}

@Override

public void surfaceChanged(SurfaceHolder holder,int height) {

mCameraSurface = holder.getSurface();

mSurfaceCreated = true;

mHandler.sendEmptyMessage(MSG_SURFACE_READY);

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

mSurfaceCreated = false;

}

private class CaptureSessionListener extends

CameraCaptureSession.StateCallback {

@Override

public void onConfigureFailed(final CameraCaptureSession session) {

Log.d(TAG,"CaptureSessionConfigure Failed");

}

@Override

public void onConfigured(final CameraCaptureSession session) {

Log.d(TAG,"CaptureSessionConfigure onConfigured");

mCaptureSession = session;

try {

CaptureRequest.Builder previewRequestBuilder = mCameraDevice

.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

previewRequestBuilder.addTarget(mCameraSurface);

mCaptureSession.setRepeatingRequest(previewRequestBuilder.build(),null,null);

} catch (CameraAccessException e) {

Log.d(TAG,"setting up preview Failed");

e.printStackTrace();

}

}

}

}

總結(jié)

以上是生活随笔為你收集整理的android surfaceview camera,android – 如何在SurfaceView上显示相机预览?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜免费高清视频 | 国产在线xx | 久色国产 | 亚洲国产精品视频 | 午夜做爰xxxⅹ性高湖视频美国 | 九九涩| 色狠狠操| 开心激情深爱 | 色日韩 | 啪啪的网站 | 在线看黄网址 | 久久国产激情 | 久久叉 | 中文字字幕在线 | 肉丝美足丝袜一区二区三区四 | 糖心vlog精品一区二区 | 浮生影视在线观看免费 | 美女视频黄色 | 人妻 日韩精品 中文字幕 | av在线激情 | 日韩精品在线免费观看视频 | 环太平洋3:泰坦崛起 | 中文字幕在线观看一区二区 | 亚洲视频免费在线播放 | 五月天av网 | 中国 免费 av | 日本少妇高潮 | 亚洲精品视频一区二区 | 日本在线免费观看视频 | 91片黄在线观看喷潮 | 国产区免费观看 | 两个人做羞羞的视频 | 人妻无码一区二区三区 | 91第一页| 草草影院最新网址 | 天天做天天躁天天躁 | 阿拉伯性视频xxxx | 一区二区三区四区在线观看视频 | 亚洲乱码中文字幕久久孕妇黑人 | 永久av在线免费观看 | 艳妇乳肉豪妇荡乳xxx | 欧美国产精品一区 | 免费看国产一级片 | 亚洲精品在线播放视频 | 精品一区李梓熙捆绑 | 日韩一本在线 | 久久国产柳州莫菁门 | 国语对白 | 日韩射吧 | 国产精品日日夜夜 | 亚洲乱熟女一区二区 | 成人一区二区电影 | 少妇的被肉日常np | 国产精品视频久久久久久 | 亚洲福利久久 | 在线精品一区 | 超碰狠狠干 | 国产精品无码一区二区无人区多人 | 一区二区三区在线看 | 激情文学久久 | 日韩av高清无码 | 国产精品久久一区二区三区动 | 水果派解说av | 欧洲一区二区三区 | 亚洲精品一区二区三区蜜桃久 | 国产在线xxx| 久草青青| 777米奇影视第四色 五月丁香久久婷婷 | japanese中文字幕 | 国产老头老太作爱视频 | 91噜噜噜| 欧美 日韩 综合 | 国产精品永久 | 日本免费在线观看 | 亚洲爱av | 日韩av在线不卡 | 亚洲精品自拍视频 | 操女网站 | 日本视频黄 | 一区二区三区四区在线播放 | 久久国产激情 | 国产成人一区二区三区影院在线 | 欧美一级片在线看 | 日本在线不卡一区 | 五月婷婷丁香六月 | 麻豆传媒在线视频 | 黑人100部av解禁片 | 一个人在线免费观看www | 日本亚洲欧美 | 婷婷九月丁香 | 国产精品偷伦视频免费观看了 | 手机看片日韩久久 | xxx久久| 国产男人搡女人免费视频 | 国产女人在线观看 | 污污视频在线观看免费 | 午夜两性| 九色porny自拍视频 | 丰满熟妇被猛烈进入高清片 |