发现问题
在android9.0 上修改原生的SnapdragonCamera 应用,需要修改成能支持后台录像,也就是Activity处于OnPause状态的时候,还是在录像(现在市面上支持后台录像的应用,基本都是在后台service中去开启录像,这个就不在本文的讨论场景了)。
原先的代码预览采用的surfaceView,后面修改成了使用textureView。不过发现按home键退出返回到桌面的时候,后台只能录制1分钟的视频,然后上报了camera error 3的错误。
这个error 3的错误,就是camera关闭了,camera 处于不可用状态下上报的异常。
问题分析
1 )根据上报的error来入手,这个error是从hardware层上报,经过CameraService.cpp,然后notify给上层,我们先来看下Camera error状态有哪些: 目前我们遇到的这个error 3,就是camera disable了,那就是那里把camera给关了。
2)第一步,我先在应用代码添加了日志,确认了上层没有自动关闭camera的操作。
接下来第二步是在CameraService.cpp中notifyError 的地方添加多点日志打印,确认是哪里回调的error信息。
根据打印的信息,跟踪下相关代码,发现CameraService这边在接收到uid 相关状态发生了变化的时候,是自动做了notify error 3,然后执行了disconnect Camera的操作。
3)根据上面的信息,网上查了下相关资料(https://blog.csdn.net/leonxu_sjtu/article/details/82787997),android 9.0上的确对后台程序使用mic、camera做了限制,如果uid处于idle状态,则会断开相应的硬件设备连接。
修改方案
因为我们可以修改framework层代码,所以在CameraService.cpp中把自动断开camera连接的地方给屏蔽掉.
自定义property属性ro.backgroundrecord.enable ,然后根据property属性值来判断是否需要屏蔽Android9.0的这个限制。
推荐阅读:
深圳上班,
生活简简单单,
14年开始从事Android Camera相关软件开发工作,
做过车载、手机、执法记录仪......
公众号记录生活和工作的点滴,
关注“小驰笔记”,期待和你相遇~
客官,点个赞呗~
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70006715/viewspace-2791611/ ,如需转载,请注明出处,否则将追究法律责任。