读AOSP的Camera源码之Camera Button启动Camera APP

打算把平时阅读AOSP Camera源码的过程记录下,有些地方没有很精确的去揣摩,所以如果理解有误,烦请大家指出!

Camera Button启动APP,这个比较简单。原理就是当你长按Camera Button的时候,系统会发出一个Broadcast,所以APP只需要注册一个Receiver来接收这个broadcast message就好,当收到这个消息后就去启动APP。

直接用代码说明

Manifest当中有这段配置

<receiver android:name="com.android.camera.CameraButtonIntentReceiver">
    <intent-filter>
        <action android:name="android.intent.action.CAMERA_BUTTON"/>
    </intent-filter>
</receiver>

这个CameraButtonIntentReceiver中会去启动APP,但是它里面有个判断,先判断Hardware可不可以用,如果可以用,就去启动APP,不可以用就什么都不做,直接return掉。好处大概就是防止当你系统运行了很多指令之后,发现HW不可以用,尽早的把错误告诉用户,这是一个良好的程序设计思路。

这里需要关注的就是CameraHolder,它的作用级是保持一个android.hardware.Camera实例,并且记录有多少“用户”打开了android.hardware.Camera这个资源,从它的mUsers属性可以看出。
CameraHolder这个有个小小的特殊的地方,就是如果你有call它的keep方法,它会在你call它的release方法的时候短暂的保持android.hardware.Camera不被释放掉(这里是3秒),这时如果你再次调用open方法,就会节省一些不必要的开销。

这里开启的过程就不说了,比较简单明了。Receiver中一个startActivity就完成了。

HTC刷机之重写CID

弄来台新的手机,没想到有些ROM在这台机器上不能用(平时用的机器大多是什么ROM都可以刷的)。

拿到手后就直接fastboot刷ROM,发现提示“remote:42 custom id check fail”
知道原因,但是不知道怎么解

后来无意中看见这台机器的CID是有限定的,大概就是大陆地区专用,非那种常用的Super CID,即11111111

于是就想把CID改掉,搜索了下,步骤很简单

先进入bootloader
power off[unplug battery] -> volume down + power key或者adb reboot-bootloader

执行

fastboot oem writecid 11111111

直到提示OKAY说明成功

然后再执行

fastboot reboot-bootloader

就可以看到修改过的CID

或者
执行

fastboot getvar cid

查看CID

完整的log如下

username@KNIGHT:~$ adb reboot-bootloader
username@KNIGHT:~$ fastboot oem writecid 11111111
...
省略了很多log
...
(bootloader) writecid: successfully
OKAY [ 22.098s]
finished. total time: 22.098s
 
username@KNIGHT:~$ fastboot reboot-bootloader
rebooting into bootloader...
OKAY [  0.150s]
finished. total time: 0.150s

username@KNIGHT:~$ fastboot getvar cid
cid: 11111111
finished. total time: 0.000s

CID就是Customer IDentity,其用处通俗来讲就是用来区别这台机器是出货到哪个地区的,更多信息大家可以Google。

如果不知道fastboot以及adb这些是什么东西的话,建议先Google了解下。

另外机器必须是S-OFF,这个大家去想办法

另外解锁bootloader很简单,目前官方已经提供,照着做就可以
详见http://www.htcdev.com/bootloader/

修改好了这些之后大家就随便刷吧,有时候可能要分两次刷,先pre-flash比如hboot,再刷其他的,反正照着提示再刷一次就可以了
最后刷机有风险,所列只是自己的记录,不保证所有人都是可以正常执行这些操作的