您的位置:首页 > 移动开发 > Android开发

Android系统移植与调试之-------)如何修改Android手机NFC模块,使黑屏时候能够使用NFC

2016-08-12 16:37 886 查看
我们都知道在不修改源代码的情况下,只能是解锁之后才能使用NFC功能。而在锁屏和黑屏2个状态下是没办法用NFC的,但是最近有个客户要求手机在黑屏状态下能够使用NFC,因此我们需要去修改Android源代码关于NFC模块。

最开始可以通过查看分析源代码,找到到NfcService的相关代码,如下: packagesappsNfcsrccomandroid fcNfcService.java

找到186行,这句是定义NFC能够使用的屏幕最小状态

?
这几个状态分别是:

SCREEN_STATE_OFF黑屏状态

SCREEN_STATE_ON_LOCKED屏幕亮了,但是是锁屏状态

SCREEN_STATE_ON_UNLOCKED 屏幕亮了,并且是解锁状态

代码定义如下,在packagesappsNfcsrccomandroid fcScreenStateHelper中定义

?
上面的这个最小状态在NfcService.java的第1706行,computeDiscoveryParameters(int screenState)方法中被调用,用来判断的,方法代码如下:

?
因此如果要改成黑屏状态下可以使用NFC的话,只要将变量NFC_POLLING_MODE改成

ScreenStateHelper.SCREEN_STATE_OFF即可,代码如下:

?
但是这样的话,手机会一直不休眠,观察电池的电流和电压发现,一直在跳动,这样在黑屏状态下,手机不会休眠,会很耗电,因此还要优化。

客户的要求是:当双击物理按键Camera键的时候,可以在黑屏状态下使用NFC十分钟,十分钟之类,差不多关于NFC的工作完成了,之后将状态改回来,即:只能在解锁状态下使用NFC,这样的话就可以黑屏使用NFC又节电。

因此,思路如下:

1、接收物理按键Camera键发送的广播,来判断是双击,并将NFC_POLLING_MODE的最小模式改为ScreenStateHelper.SCREEN_STATE_OFF。

2、需要写一个定时器来处理十分钟之后将NFC_POLLING_MODE的最小模式改为会原来的ScreenStateHelper.SCREEN_STATE_ON_UNLOCKED。

因此,首先先定义几个常量,从第185行static final int NFC_POLLING_MODE= ScreenStateHelper.SCREEN_STATE_ON_UNLOCKED;处开始修改,修改代码如下:

?
第二步:写一个广播接收者来处理物理按键Camera,按下和松开时发出的广播。

因为是要判断双击Camera,所以这里只要接收松开Camera键时发出的广播即可。这个广播是公司自己定义的,定义的广播为:com.runbo.camera.key.up。所以现在处理这个广播。因为代码中本来就动态注册了一个广播接收者,因此我们在这个广播接收者种再注册一个Intent即可。代码如下:在第450行

?
这样我们处理这个双击Camera键可以在mReceiver中处理了,在mReceiver中的onReceive方法中,判断action是否是com.runbo.camera.key.up,2295行代码如下:

?
还要将computeDiscoveryParameters()方法中的判断语句改掉,1733行代码如下:

?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android nfc
相关文章推荐