症状:首次启动我的应用程序崩溃java.lang.SecurityException: Lacking privileges to access camera service。我收到了“不幸您的应用程序崩溃”对话框,单击“确定”,在此对话框中有两个对话框询问必要的权限。我说“OK”,从现在开始我的应用程序工作。接下来的开始没有崩溃。Android M请求onSurfaceTextureAvailable回调权限不在活动

原因:以后的阅读和调试一段时间,我才理解我的应用程序的问题是,它希望做一些与摄像机相关的逻辑,获得所需的权限(onSurfaceTextureAvailable回调在我CameraHandler类)之前或相机前表面视图来到前景。

关于SO和Github上的类似错误还有很多问题,但是我仍然很难弄清楚。

我试图通过this答案,但我的设置有点不同,即我有我的相机逻辑里面不是一个活动的不同类,我真的很想保持它不混乱我的CameraActivity类。有处理这个问题的好方法吗?

如何确保当我的CameraHandler类中的onSurfaceTextureAvailable被激发时,权限已被授予,以便在第一次运行时我没有获得java.lang.SecurityException: Lacking privileges to access camera service?

这是我SurfaceTextureListener位于CameraHandler类:

private val surfaceTextureListener = object : TextureView.SurfaceTextureListener {

override fun onSurfaceTextureAvailable(surface: SurfaceTexture, width: Int, height: Int) {

openCamera(width, height) //this line here makes my app crash

}

override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture, width: Int, height: Int) {

configureTransform(width, height)

}

override fun onSurfaceTextureDestroyed(surface: SurfaceTexture): Boolean {

return true

}

override fun onSurfaceTextureUpdated(surface: SurfaceTexture) {

}

}

我CameraActivity的onCreate,的onResume(),并在onPause():

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

if (!canAccessCamera() || !canRecordAudio()) {

requestPermissions(INITIAL_PERMISSIONS, INITIAL_REQUEST)

}

}

}

override fun onResume() {

super.onResume()

cameraHandler.startHandler()

}

override fun onPause() {

cameraHandler.stopHandler()

super.onPause()

}

权限内CameraActivity检查

@RequiresApi(api = Build.VERSION_CODES.M)

private fun canAccessCamera() : Boolean {

return (hasPermission(android.Manifest.permission.CAMERA))

}

@RequiresApi(api = Build.VERSION_CODES.M)

private fun canRecordAudio() : Boolean {

return (hasPermission(android.Manifest.permission.RECORD_AUDIO))

}

@RequiresApi(api = Build.VERSION_CODES.M)

private fun hasPermission(perm : String) : Boolean{

return (PackageManager.PERMISSION_GRANTED == checkSelfPermission(perm))

}

@RequiresApi(Build.VERSION_CODES.M)

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults)

if (requestCode == INITIAL_REQUEST) {

if (canAccessCamera() && canRecordAudio()) {

recordButton2.setOnClickListener {

if (isRecording) {

cameraHandler.endRecording()

} else {

currentFileName = generateTimestampName()

createCSVFile(currentFileName)

cameraHandler.startStopRecording()

}

isRecording = !isRecording

}

} else {

Toast.makeText(this, "We need it to perform magic", Toast.LENGTH_SHORT).show()

}

}

}

2017-08-07

lidkxx

android 权限开启回调,Android M请求onSurfaceTextureAvailable回调权限不在活动相关推荐

  1. android服务开启线程,android之service与intentService的不同

    不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很少注意到还有个IntentService,前段时间准备面试的时候看到了一篇关于IntentServic ...

  2. android adb开启服务,android adb 启动activity、service,发送broadcast等操作

    android adb 启动activity.service,发送broadcast等操作 图片发自简书App 一.adb启动activity: adb shellam start -n {包(pac ...

  3. android无法开启wifi,android机无线网开不了

    1.电脑无法关机的原因有: (1)系统文件中自动关机程序缺陷.在"开始/运行"中输入命令:"rundll32 user.exe,exitwindows",看能否 ...

  4. java android五子棋_基于android实现五子棋开发

    基于Android的五子棋的开发,供大家参考,具体内容如下 需求分析 1 棋盘和棋子绘制 2 按照五子棋的规则制定游戏胜负规则 3 鼠标响应 在对战中 需要通过鼠标点击下棋 进行游戏的基本操作 4 游 ...

  5. android 6.0蓝牙服务开启,Android应用开发之Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法...

    本文将带你了解Android应用开发Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法,希望本文对大家学Android有所帮助. 为提供更高的数据保护   Android6.0版本 ...

  6. Android不使用支持库请求运行时权限

    Android 6.0后,用户开始在应用运行时向其授予权限,而不是在应用安装时授予.Android官网上也有相关教程:在运行时请求权限.但教程是使用支持库来举例的,用支持库的话,APK的大小也会变得很 ...

  7. hook Android 权限请求, 插入权限目的dialog显示

    Permission_aim_tip 作用 因为越来越严格的隐私政策要求,需要在申请权限的时候,告知用户需要该权限的目的.为了能快速适配已有项目,需要一个能自动感知权限申请,并显示申请原因的框架.于是 ...

  8. android危险权限分组,Android 6.0权限请求相关及权限分组方法

    Android M(6.0)API 23后加入了权限请求设置,APP需要使用某些权限需要主动申请. 权限分为3类,一组是Normal权限,无需申请,另一组是Dangerous,需申请,然后是特殊权限, ...

  9. uni-app做android应用开启定位权限

    先说场景再贴代码,uni-app开发app应用,在用户没有开启定位时,通过uni.getLocation()无法获取用户位置信息,需要提示用户开启定位功能,具体实现如下: 第一步: 在manifest ...

最新文章

  1. 人工智能及其应用(第5版).蔡自兴-3章课后习题。【参考答案】
  2. python好还是c+-嵌入式系统中,Python与C/C++哪方更为适用?
  3. docker 删除所有容器和镜像的命令
  4. Hive:hive is not allowed to impersonate anonymous
  5. python变量的作用域及生命周期_Python——变量的作用域
  6. log4net用法实例
  7. JavaScript流程分支结构(1)
  8. scala 构造_Scala咖喱和自动类型依赖的封闭构造
  9. 对Javascript的原型,原型链和继承的个人理解
  10. 视差滚动效果原理解析和效果实现
  11. ext2、ext3与ext4的区别
  12. 夜神模拟器访问本地服务端口操作说明
  13. 计算机三维制图描述零件绘制过程,计算机三维造型及创意设计ppt.ppt
  14. 使用Kinect2作为Oculus游戏应用的输入设备
  15. python wgs84坐标转换_python WGS84和ECEF坐标的转换
  16. 北邮数电期末复习——第三章
  17. ES6新特性----面试
  18. ActiveMQ——如何监控ActiveMQ
  19. 网络舆情分析技术 读书笔记1
  20. 纽约大学研究生 计算机科学 申请,纽约大学计算机科学理学硕士理学硕士研究生申请要求及申请材料要求清单...

热门文章

  1. HTML5-CSS3-JavaScript(1)
  2. 与病毒名称相似,“捏脸”游戏 ZEPETO 涉嫌窃听?...
  3. docker网桥讲解
  4. 这3款浏览器体积小,好用速度快,堪比夸克
  5. nuxt ssr打包和部署
  6. 汉语拼音拼读的小技巧
  7. java程序员语录_java程序员励志说说26条
  8. 人工智能 | ShowMeAI资讯日报 #2022.06.25
  9. 同花顺程序交易接口实现类
  10. 方块 游戏界面java_JAva 判断方块游戏清除方法