当前位置: 首页 > news >正文

深圳私人网站优化社交网站开发教程

深圳私人网站优化,社交网站开发教程,淘宝客推广怎样做网站,来个网站在Android设备中#xff0c;做预览拍照的需求的时候#xff0c;我们会指定 CameraSelector DEFAULT_FRONT_CAMERA前置 或者后置CameraSelector DEFAULT_BACK_CAMERA 如果你使用的是平板或者工业平板#xff0c;那么就会遇到多摄像头以及外置摄像头问题#xff0c;简单的指… 在Android设备中做预览拍照的需求的时候我们会指定 CameraSelector DEFAULT_FRONT_CAMERA前置 或者后置CameraSelector DEFAULT_BACK_CAMERA 如果你使用的是平板或者工业平板那么就会遇到多摄像头以及外置摄像头问题简单的指定前后置是不行的哪怕是USB 外置也有挂载两个的情况 本文就是写于两个外置的特殊情况作为验证所以我们必须能获取所有可用的摄像头我们以最新的预览拍照控件为例 单摄像头推荐PreviewViewCameraSelector 与挂载的位置相关 且绑定了activity lifecycle 多摄像头推荐SurfaceviewCameraId 与id相关 surfaceview方式获取id在下面 PreviewView 为例初始化的时候需要使用 CameraSelector去绑定拍照的UseCase MainThreadNonNullpublic Camera bindToLifecycle(NonNull LifecycleOwner lifecycleOwner,NonNull CameraSelector cameraSelector,NonNull UseCase... useCases) {if (getCameraOperatingMode() CAMERA_OPERATING_MODE_CONCURRENT) {throw new UnsupportedOperationException(bindToLifecycle for single camera is not supported in concurrent camera mode, call unbindAll() first);}setCameraOperatingMode(CAMERA_OPERATING_MODE_SINGLE);Camera camera bindToLifecycle(lifecycleOwner, cameraSelector, null, emptyList(),useCases);return camera;} 因为我们需要获取所有可用的摄像头类似旧版的CameraId 将下面代码放入activity获取 val cameraProviderFuture ProcessCameraProvider.getInstance(this)cameraProviderFuture.addListener({LogUtils.log(摄像头结果返回)val cameraProvider cameraProviderFuture.get()var textC val cameraInfos cameraProvider.availableCameraInfosvar isSupportBack falsevar isSupportFront falsevar isExternal falsevar isUnknow falsefor (cameraInfo in cameraInfos) {when (cameraInfo.lensFacing) {CameraSelector.LENS_FACING_FRONT - {isSupportFront truetextC \n前置 lensFacing:[${cameraInfo.lensFacing},${cameraInfo.cameraSelector}]}CameraSelector.LENS_FACING_BACK - {isSupportBack truetextC \n后置 lensFacing:[${cameraInfo.lensFacing},${cameraInfo.cameraSelector}]}CameraSelector.LENS_FACING_EXTERNAL - {isExternal truetextC \n外置 lensFacing:[${cameraInfo.lensFacing},${cameraInfo.cameraSelector}]}CameraSelector.LENS_FACING_UNKNOWN - {isUnknow truetextC \n未知 lensFacing:[${cameraInfo.lensFacing},${cameraInfo.cameraSelector}]}}}LogUtils.logI(init,设备支持情况后置:${isSupportBack},前置:${isSupportFront},外置:${isExternal},未知:${isUnknow})binding.tvCheckResult.text len:$textC\n 设备支持情况后置:${isSupportBack},前置:${isSupportFront},外置:${isExternal},未知:${isUnknow}}, ContextCompat.getMainExecutor(this)) 工业平板做的产品摄像头一般固定获取之后指定即可也可以自己编辑优先级逻辑下面是插两个摄像头的例子 可以使用上述打印的具体摄像头推荐 也可以自己bulid自己build有局限性比如两个外置你使用2去build就不行了 val selector: CameraSelector if (isSupportBack) {CameraSelector.DEFAULT_BACK_CAMERA} else if (isSupportFront) {CameraSelector.DEFAULT_FRONT_CAMERA} else if (isExternal) {CameraSelector.Builder().requireLensFacing(2).build()} else if (isUnknow) {CameraSelector.Builder().requireLensFacing(1).build()} else {CameraSelector.DEFAULT_BACK_CAMERA} // 如果你使用的是surfaceviewcameraId 而且是多预览  val cameraManager activity.getSystemService(AppCompatActivity.CAMERA_SERVICE) as CameraManagerval cameraIds cameraManager.cameraIdListfor (cameraId in cameraIds) {val characteristics cameraManager.getCameraCharacteristics(cameraId)val facing characteristics.get(CameraCharacteristics.LENS_FACING)} 明确了cameraId 其他通过预览的示例代码 我也传一下吧由于每个摄像头是独立 有多少个预览就new多少个出来  class CameraUtils {val TAG CameraUtilsprivate var mCameraDevice: CameraDevice? nullprivate var mCaptureSession: CameraCaptureSession? nullprivate var mPreviewBuilder: CaptureRequest.Builder? nullfun bindSurfaceView(activity: Activity,surfaceView: SurfaceView,len: Int,cId: String?): String {val cameraManager activity.getSystemService(AppCompatActivity.CAMERA_SERVICE) as CameraManagersurfaceView.holder.setFixedSize(9999, 9999)LogUtils.logI(TAG, bindSurfaceView)val cameraId cId ?: getCameraId(cameraManager, len)try {LogUtils.log(len:$len cameraId:$cameraId)if (TextUtils.isEmpty(cameraId)) {LogUtils.logE(TAG, cameraId null)return cameraId null}if (ActivityCompat.checkSelfPermission(activity,Manifest.permission.CAMERA) ! PackageManager.PERMISSION_GRANTED) {LogUtils.logE(TAG, 没有权限)return 没有权限}cameraManager.openCamera(cameraId!!, object : CameraDevice.StateCallback() {override fun onOpened(camera: CameraDevice) {LogUtils.logE(TAG, onOpened cameraId:$cameraId)mCameraDevice cameracreateCaptureSession(camera, surfaceView)}override fun onDisconnected(camera: CameraDevice) {LogUtils.logE(TAG, onDisconnected cameraId:$cameraId)}override fun onError(camera: CameraDevice, error: Int) {LogUtils.logE(TAG, onError:$error cameraId:$cameraId)}}, null)} catch (e: CameraAccessException) {e.printStackTrace()LogUtils.logE(TAG, onError:$e)return onError:$e}return cameraId:$cameraId}/*** 创建CaptureSession*/private fun createCaptureSession(camera: CameraDevice, surfaceView: SurfaceView) {try {surfaceView.run {val surfaceHolder: SurfaceHolder getHolder()surfaceHolder.setFixedSize(getWidth(), getHeight())val surfaces: MutableListSurface ArrayList()surfaces.add(surfaceHolder.surface)mPreviewBuilder camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)mPreviewBuilder?.addTarget(surfaceHolder.surface)camera.createCaptureSession(surfaces,object : CameraCaptureSession.StateCallback() {override fun onConfigured(session: CameraCaptureSession) {mCaptureSession sessionupdatePreview()}override fun onConfigureFailed(session: CameraCaptureSession) {// 配置会话失败}},null)}} catch (e: CameraAccessException) {e.printStackTrace()}}private fun updatePreview() {if (mCameraDevice null) {LogUtils.logE(TAG, mCameraDevice null)return}if (mCaptureSession null) {LogUtils.logE(TAG, mCaptureSession null)return}if (mPreviewBuilder null) {LogUtils.logE(TAG, mPreviewBuilder null)return}LogUtils.logI(TAG, updatePreview.)try {mCaptureSession?.setRepeatingRequest(mPreviewBuilder!!.build(), null, null)} catch (e: Exception) {e.printStackTrace()LogUtils.logE(TAG, updatePreview: $e)}}Throws(CameraAccessException::class)private fun getCameraId(cameraManager: CameraManager, len: Int): String? {val cameraIds cameraManager.cameraIdListfor (cameraId in cameraIds) {val characteristics cameraManager.getCameraCharacteristics(cameraId)val facing characteristics.get(CameraCharacteristics.LENS_FACING)// CameraCharacteristics.LENS_FACING_BACK CameraCharacteristics.LENS_FACING_FRONTif (facing ! null facing len) {return cameraId}}return null}} 比如用RecyclerView 多个item预览  可以这样初始化 fun getOneUtils(index: Int): CameraUtils {var cache mCameraUnitsMap[index]if (cache null) {cache CameraUtils()mCameraUnitsMap[index] cache}return cache} 使用 val text getOneUtils(position).bindSurfaceView(thisCameraInfoActivity,holder.getView(R.id.surfaceView),len, cameraId) 如果是uniapp同学需要买相关插件的可以留言联系
http://www.pierceye.com/news/359316/

相关文章:

  • 青海个人旅游网站建设网站建设教程软件下载
  • 做AMC12的题的网站龙华网站建设专业公司
  • 莱州网站制作友情链接交换形式
  • 如何编写网站做美食类网站现状
  • 一站式推广平台做家装模型的效果图网站
  • 企业电子商务网站开发实验报告苏州建筑设计公司排名
  • 网站的优化与网站建设有关吗网站先做移动站在做pc站可行吗
  • 河北网站制作公司电话建设网站的情况说明
  • 高校网站平台建设wordpress小工具不见了
  • 网站建设 会计处理北京垡头网站建设公司
  • 唐山网站制作案例网站建设中标
  • 网站开发培训费济南网络优化推广公司哪家好
  • 谷歌网站优化可以做物理题的网站
  • 公司的网站建设是什么部门品牌餐饮加盟网站建设
  • 深圳品牌网站建设公司哪家好学建网站 必须学那些知识
  • 国内设计网站推荐山东省建设安全生产协会网站
  • 南京专业网站开发团队如何用手机建网站
  • 在婚恋网站上做红娘怎么样正规网络推广服务
  • 网络媒体设计是做什么的西安网站优化公司
  • 有项目去哪里找投资人河南网站优化排名
  • 灯塔建设网站网上做流量对网站有什么影响
  • 网站模板 黑色建设网站安全措施
  • 临沂企业网站建设珠海建设网站的公司哪家好
  • 中国网站建设公司排行榜网站建设精美模板
  • 国家对于学校网站建设深圳网站建设公司网络服务
  • 承德建站公司福田庆三整鼻子好吗
  • 域名和网站关联seo优化是指
  • 爱站网官网关键词周口网站关键词优化
  • vps网站管理器阿里云如何做网站
  • 网站是什么意思例如营销型网站文案怎么做