日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 探花视频在线版播放免费观看 | 人妻熟女一区二区三区 | 国产日韩成人 | 中文天堂在线播放 | 亚洲欧美韩国 | 蜜桃视频一区二区三区 | av导航福利 | 另类一区| 免费在线你懂的 | 亚洲国内精品 | 成人在线观看你懂的 | 成年网站 | 91亚洲综合| 日韩欧美国产视频 | 鲁一鲁啪一啪 | 国产欧美一区二区三区精品酒店 | 娇妻被老王脔到高潮失禁视频 | 午夜精品久久久久久久99老熟妇 | 亚洲AV无码精品久久一区二区 | a v视频在线观看 | av九九九| 波多野结衣视频在线看 | 粉嫩一区 | 天天综合天天添夜夜添狠狠添 | 91精品国产综合久久久蜜臀 | 18禁超污无遮挡无码免费游戏 | 先锋久久| 国产精品视频在线观看免费 | 国内外免费激情视频 | 精品国产一区三区 | 国产激情精品 | 西川结衣在线观看 | 日韩在线资源 | 欧美一区二区在线视频 | 亚洲精品一区二区潘金莲 | 久久亚洲精选 | 欧美天堂久久 | 最新av不卡 | 成人av综合网 | 国产情侣激情 | 国产一区中文 | 日本男女网站 | 依人综合网 | 91日本视频 | 成人午夜视频免费观看 | 日本资源在线 | 美女av免费在线观看 | 色婷婷av一区二区三区之e本道 | 久操中文| 夫妻啪啪呻吟x一88av | 国产精品福利一区二区三区 | 亚洲精品国产精品乱码在线观看 | 天天添天天射 | 日本性高潮视频 | 国产欧美精品在线 | 伊人久久亚洲综合 | 火影黄动漫免费网站 | 97伊人久久 | av在线资源| 亚洲精品视频一区 | 亚洲国产精品久久久久久久 | 精品午夜视频 | 日韩第一视频 | 日韩精品黄 | 99re6在线精品视频免费播放 | 97超碰伊人| 天天色天天看 | 五月天综合久久 | 天堂av一区二区 | 俺也来俺也去俺也射 | 中文字幕在线观看日韩 | 久久久1 | 福利一区福利二区 | 吃瓜网今日吃瓜 热门大瓜 色婷在线 | 在线无| 亚洲精选国产 | 久久99久久99精品免观看粉嫩 | 男生和女生一起搞鸡 | 国产伦精品一区二区三区妓女下载 | 国内自拍偷拍 | 中文字幕一区二区三区精彩视频 | 九九精品视频免费 | 国产精品人人人人 | 97超碰超碰| 免费在线视频一区 | 久久丝袜美腿 | 欧美精品久久久久久 | 精品国产欧美一区二区 | 久久综合亚洲色hezyo国产 | 操亚洲| 久草视频在线免费 | 青青草原国产在线 | 国产精品福利在线 | 欧美性一区二区三区 | 打白嫩屁屁网站视频短裙 | 中文字幕亚洲乱码熟女一区二区 | 99国产精品国产免费观看 | 亚洲一本二本 | 午夜一级视频 |