Android Jelly Beam NFC架构及源码分析之一

本文首先是一些准备资料,主要来源是度娘,在此感谢原作者。在准备资料了解后,及第三节开始算正式步入正题。

一、手机NFC架构

目前手机主要是S2C(SigIn-SigOut-Connection)架构,主要是避免NFC标签(即NFC卡)与NFC装置(即NFC读卡机、存取器)两者在感应时,被其他有心人士从中、从旁对传输资料进行拦窃。如下图:

二、Android NFC架构

具体内容参见 http://blog.csdn.net/mutouyueliang/archive/2011/03/08/6232028.aspx

三、NFC Service的启动和初始化

OK,现在开始进入正题。

NFC Service本质上是一个系统APP,和Phone类似。注意在~/packages/app/Nfc/AndroidManifest.xml中设置了android:persistent="true"。所以在AM(ActivityManager)启动后,AM会启动NFC service.这个时候进入NFC service的启动流程。

根据JAVA类实例化的顺序我们知道,首先系统会创建一个NfcServiceHandler, 这个handler在服务完全启动后承担着主要的作用。之后会详细的写。

后面会执行到onCreate函数,这个时候会先实例化TagService,NfcAdapterService,NfcAdapterExService这三个内部类,而这三个类是分别对~/platform/frameworks/base/core/java/android/nfc下面几个aidl的实现。其中NfcAdpaterService会在NfcService启动后注册到ServiceManager里面去,暴露给其他进程一些基本的方法,如启用和禁用NFC设备。

之后实例化NativeNfcManager,这个时候就会载入JNI,然后在JNI这一层里面创建了一个monitor(其实就是几个semaphores, mutex 以及条件变量,这个monitor在后面用处很大,因为android nfc的操作都是异步操作又是多线程,所以为了确保唯一性和顺序性,以及阻塞线程)和一个nfc_jni_native_data这个native_data会存放NativeNfcManager这个的实例。事实上和JNI交互以及在应用层干实事的就是NativeNfcManager。

然后会创建HandoverManager(主要是处理Handover消息,理论上可以处理wifi和bluetooth,实际上目前主要是用来建立蓝牙连接,Android目前P2p传输文件其实就是通过handover建立蓝牙连接,然后通过蓝牙传输数据),NfcDispatcher以及P2pLinkManager。从名字都可以看出来NfcDispather是负责消息的分发,P2pLinkManager是用来处理P2p链接的。这里主要说下P2pLinkManager,它实现了两个接口,分别是Handler.Callback和P2pEventListener.Callback,所以我们可以看到在类的构造函数中,实例化P2pEventManager和Handler的时候会将自身传进去。当然这个Handler和前面的NfcServiceHandler公用一个MessageQueue和一个Looper,只是不知道两个handleMessage是如何处理的(望知情人士讲解下)。此外这一个步骤和前面一个步骤(实例化NativeNfcManager)是可以交换顺序的。

到了这里后会启动安全管理模块、Access control等,内容很简单,同时也不是重点,就略过了。这之后是将NfcAdpater注册到ServiceManager里面,然后是自身注册Receiver,主要用来处理一些系统事件,如锁屏,App安装等。

实事上到了这里我们的操作大部分都还是在应用层,最多到JNI,然而即使到了JNI我们也只是在内存上给两个变量分配了空间而已,并未操作硬件,甚至于我们还不知道这个手机是否安装的有NFC芯片。NFC设备的初始化和真正的启用其实到最后一句 new EnableDisableTask().execute(TASK_BOOT)才开始执行的。

 这一句首先是创建了一个异步Task,然后开始执行启动操作。也就说是另起了一个线程,然后开始初始化设备。

 

好吧,时间太晚,明天继续。

转载于:https://www.cnblogs.com/jecofang/archive/2013/04/17/3023065.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容推荐   《Android 4高级编程(第3版)》由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4SDK开发移动应用程序的理想指南。本书见解深刻,帮助经验丰富的Android开发人员充分挖掘Android4的新特性的潜力,同时讲解了Android开发的基础知识,使初学者也可以借助本书入门。作为一本以实用性为目的的指导图书,本书带领您逐步完成复杂程度越来越高的Android项目,每个项目中都引入一种新的Android平台特性,并着重指出有助于编写引人入胜的应用程序的技术和最佳实践。   《Android 4高级编程(第3版)》特色   ◆ 深入分析Android应用程序的组件和生命周期   ◆ 探讨了Android的UI原理、设计理念和UI API,使用户界   面在手机、平板电脑和电视上都引人注目   ◆ 介绍了创建基于地图的应用程序和使用基于位置的服务   的相关知识   ◆ 解释了如何创建后台服务、通知和Cloud to Device Messaging   ◆ 演示了如何创建动态的、交互式的主屏幕微件和Live   Wallpaper   ◆ 探索了硬件和通信API,包括蓝牙、电话、Wi-Fi Direct、   NFCAndroid Beam   ◆ 讲解了摄像头和硬件传感器的使用   ◆ 详述了新的动画框架和其他增强用户体验的特性,包括   拖放、Action Bar和Fragment   ◆ 新增了关于应用程序发布的一章内容   ◆ 介绍了License Verification和应用程序内收费服务 作者简介   Reto Meier,目前是Google Android 团队的一名Android 开发人员倡导者,帮助Android开发人员创建最优秀的应用程序。Reto 是一位经验丰富的软件开发人员,拥有逾10 年的GUI 应用程序开发经验。进入Google之前,他曾在多种行业中工作过,包括海洋石油、天然气以及金融业。   Reto 始终不渝地追求掌握新技术,从2007 年Android 发布之初Reto 就迷恋上了此项技术。 目录 第1章 Android简介 第2章 开始入手 第3章 创建应用程序和Activity 第4章 创建用户界面 第5章 Intent和Broadcast Receiver 第6章 使用Internet资源 第7章 文件、保存状态和首选项 第8章 数据库和Content Provider 第9章 在后台操作 第10章 扩展用户体验 第11章 高级用户体验 第12章 硬件传感器 第13章 地图、地理编码和基于位置的服务 第14章 个性化主屏幕 第15章 音频、视频以及摄像头的使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值