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行代码如下:
?
最开始可以通过查看分析源代码,找到到NfcService的相关代码,如下: packagesappsNfcsrccomandroid fcNfcService.java
找到186行,这句是定义NFC能够使用的屏幕最小状态
?
SCREEN_STATE_OFF黑屏状态
SCREEN_STATE_ON_LOCKED屏幕亮了,但是是锁屏状态
SCREEN_STATE_ON_UNLOCKED 屏幕亮了,并且是解锁状态
代码定义如下,在packagesappsNfcsrccomandroid fcScreenStateHelper中定义
?
?
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键时发出的广播即可。这个广播是公司自己定义的,定义的广播为:com.runbo.camera.key.up。所以现在处理这个广播。因为代码中本来就动态注册了一个广播接收者,因此我们在这个广播接收者种再注册一个Intent即可。代码如下:在第450行
?
?
?
相关文章推荐
- Android系统移植与调试之------->如何修改Android手机NFC模块,使黑屏时候能够使用NFC
- Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
- Android系统移植与调试之------->如何修改Android手机显示的4G信号强度的格子数
- [置顶] Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏的时候的切换与显示
- [置顶] Android系统移植与调试之------->如何修改Android设备添加3G上网功能
- Android系统移植与调试之------->如何修改开机动画的两种方式剖析
- Android系统移植与调试之------->如何修改Android的默认语言、默认时区
- Android系统移植与调试之------->如何修改Android设备的默认休眠时间
- Android系统移植与调试之------->如何修改Android系统默认显示【开发者选项】并默认打开【USB调试】和【未知来源】开关
- Android系统移植与调试之------->如何修改开机动画的两种方式剖析
- Android系统移植与调试之------->如何修改Android自带的apk出现一圈圈类似鸡蛋的花纹
- Android系统移植与调试之------->如何修改开机动画的两种方式剖析
- Android系统移植与调试之------->如何修改Android启动动画和开机声音
- Android系统移植与调试之------->如何修改Android的默认语言、默认时区
- Android系统移植与调试之------->如何修改开机动画的两种方式剖析
- Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(一)
- Android系统移植与调试之------->如何修改Android设备的桌面背景图片
- Android系统移植与调试之------->如何修改Android设备的开机第一阶段Logo
- Android系统移植与调试之------->如何修改Android设备存储盘符名称与Android设备的型号
- Android系统移植与调试之------->如何修改Android设备的开机第二阶段Logo