第1篇:安卓心得体会
安卓心得体会
【篇1:android学习心得】
android学习心得
这学期,我们新开了一门课程——android的研发。在老师们的介绍下,我们了解android的开发环境以及控件的功能。刚开始接触android觉 得 既 陌生 又 亲 切,陌 生 在 于 没 有 学 过 具 体 的 开 发 软 件,亲 切 在于它在界面开发上和web也可以形成了相通的架构,更加方便。
一、android简介
android一词的本义指“机器人“,同时也是google于2007年11月5日宣布的基于linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为android 2.4 gingerbread和android 3.0 honeycomb。android是基于linux开放性内核的操作系统,是google公司在2007年11月5日公布的手机操作系统。android 早期由原名为android的公司开发,谷歌在2005年收购android.inc后,继续对android系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以java编写。2011年初数据显示,仅正式上市两年的操作系统android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能mp4方面也有较大发展。采用android系统主要厂商包括台湾的htc,(2..android应用程序组成3.api参考文档的使用包(package)的索引
●interfaces
●claes
●enums
●exceptions 类(cla)的索引
●扩展和实现内容
●按包名的继承关系(可用于反找包)
●overview(概览)
●xml attributes(xml的属性)
●constants(常量)
●constructors(构造函数)
●methods(方法)
通过将近快一学期的学习,在这次android这门课程的学习过程中,我了解到:
(一)android基础知识: 1.、环境的配置:
(1)配置java程序开发环境;
(2)安装并汉化eclipse(jdk);
(3)android sdk的安装;
(4)ad t 的安装及配置;
(5)android 模拟器的配置。
2.、【篇2:安卓实训心得】
项目总结 时间过的好快,为期三个月的实训生活即将结束了,每一次的实训我们都受益匪浅,我们学到的不仅仅是课内还有课外,实训让我们的课内知识得到了巩固,专业知识、编程水平
都有很大的提高,我们非常感谢这次实训。刚开始二周的高强度的课程安排让我们受益匪浅;接下来的项目实训又让我们可以巩固
了课程。这让我觉得实习生活充实而有意义。乐淘购物项目和android优化大师,我更好的学习了ui的设计,如何使界面漂亮,美观,巩固了listview,gridview,的使用,学会了动画进入界面的,和会移动的画廊等等。在这
两个项目中,除了让我明白工作中需要能力,素质,知识之外,更重要的是学会了如何去完
成一个任务,懂得了享受工作。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获
取成功,一种自信心由然而生,这就是工作的乐趣。有时候也需要虚心请教,从别人的身上
真得能学习到不自己没有的东西,每一次的挫折只能使我更接近成功。音乐播放器项目,我们是七个人组成小组完成的,由组长带领我们,分配任务,每个人,都发挥自己的长处,更好地去完成任务。对于团队开发来说,团结一致使我深有体会。团队的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具
体实践中,不仅加深我对理论的掌握和 运用,还让我拥有了一次又一次难忘的开发经历,这是也是实训最大的收获。这次实训对于我以后学习、找工作也真是受益菲浅,在这3个月中让我初步从理性回到
感性的重新认识,也让我初步的认识这个社会,对于以后做人所应把握的方向也有所启发!
相信这些宝贵的经验会成为我今后成功的重要的基石。在此,我非常感谢指导老师和
同学对我的帮助。篇2:android实训心得 android实训心得
刚开始接触android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的android sdk开发范例大全中的例
子以及android提供的apidemos进行学习,尽管例子之间的连接比较零散,不过通过这些例
子的学习我可以学习到了很多和以前java上相通的思想。我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。通过半个月的android实习,基本掌握了android应用程序开发的一般流程。对常用控
件基本掌握其用法,对其事件的监听方法也基本掌握。学习android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。通过学习android的控件、布局、activity、service等一系列基础知识,对整个android的开发有了大致的了解。例如 要的布局(或者控件),在学习界面中,我发现android为我们
提供了很好的类似反射机制,通过layout文件夹下的配置文件,可以快速的形成界面,在配
置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指
定的界面,同样你可以通过java代码直接创建view进行添加,不过这种方式比较复杂。对
一些点击、选中、按键等处理的事件,界面之间的跳转intent管理,通过bundle对数据
在界面之间进行传输。在手机交互式通信服务中,学习了android手机之间进行短信发送、广播、对广播的监
听、服务等,在service类中没有context,可以通过handler来每秒反复运行,自动送出
系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的currentactivity这个变量进行控制,进行处理。在android编程过程中巩固熟悉了java的编程。由于android应用程序的开发离不开 java的支持,所以基础的java知识是必须的。android系统是基于linux的手机操作系统平
台,要深入系统的学习android,不仅仅是有java和android应用开发,必须要具备linux,cc++高级编程才能深入的涉及android framework和android内核开发。成为android开发的高素质人才。所以,在后续对android的学习中可能会看一些较底层的书籍。由于这次实习时间较短,对于android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到
了很多平时没有遇到或者没有特别关注的问题,如常见的activity忘记注册,对sd卡存取
需要权限,在写sql语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际
开发中才能体会到并且解决,并且在解决后可以长时间的记住。通过android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也
有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获
得了很多东西,提高了自己的编程技巧和编程方法,并且认识了android应用程序的开发,以及加深了对java的认识。最后,通过实习,我收获了很多东西,特别是编程方面的,这对即将毕业的我们来说,这次实习是一次较为珍贵的充电,本文由成都android培训 华育国际提供 通信与电子信息专业实训报告 项目名称:基于android的游戏开发 班 级 10通信1班姓 名
学 号
指导教师
成 绩 实训时间:年月日—目录
一、实训目的及其意义 .....3 1.1、目的及意义.......3 1.2、研究现状.........3
二、实训主要任务、重点及难点 4 2.1、任务 4
2.2、重点内容及实现途径..4
三、实训具体内容及完成的主要工作 ......5 3.1、认识基础开发.....6 3.2、了解数据存储.....6 3.3、总体实训过程.....7
四、实际遇到的困难,解决问题的方法和措施 .8
(一)、所遇问题 8
(二)、解决方法与措施 ....9
五、心得体会 9
一、实训目的及其意义
1.1、目的及意义 了解现阶段互联网发展主流,了解移动互联网,认识移动互联网的发展与展望,认识android,了解基于android的应用软件开发方法及其商业流程。把理
论与实际结合,通过对理论知识的理解,领悟从而运用到生活实际巩固所学的知识,提高对
实际生活的认识,积累经验。使学生在此期间能够初次体会到实际生产中的种种技能与经验,完成一项项目锻炼独立思考及团队合作能力。使学生们进一步加深对所学知识的理解,理论
联系实际,巩固所学有关计算机基础理论知识和基本技能,学习有关计算机最新技术方面的应用,增强学生对计算机在社会生活,社会生产中应用的感性认识,深入了解计算机在各个
领域中的应用状况。生产实习是学校教学的重要补充部分,是区别于普通学校教育的一个显
著特征,是教育教学体系中的一个不可缺少的重要组成部分和不可替代的重要环节。它是与
今后的职业生活最直接联系的,学生在生产实习过程中将完成学习到就业的过渡,因此生产
实习是培养技能型人才,实现培养目标的主要途径。它不仅是校内教学的延续,而且是校内
教学的总结。生产实习一方面巩固了书本上学到的理论知识,另一方面,可获得在书本上不
易了解和不易学到的生产现场的实际知识,使我们在实践中得到提高实训环节对于提高学生的综合能力和全面素质具有重要意义。1.2、研究现状
android 是google开发的基于linux平台的开源手机操作系统。它包括操作系统、用户
界面和应用程序——移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创
新的专有权障碍。google与开放手机联盟合作开发了 android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 t-mobile 在内的 30 多家技术和无线应用的领军企业组成。
google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希
望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。android主要使用于移动设备,如智能手机和平板电脑,由google公司和开放手机联盟
领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。android
操作系统最初由andy rubin开发,主要支持手机。2005年8月由google收购注资。2007
年11月,google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发
改良android系统。随后google以apache开源许可证的授权方式,发布了android的源代
码。第一部android智能手机发布于2008年10月。android逐渐扩展到平板电脑及其他领
域上,如电视、数码相机、游戏机等。2011年第一季度,android在全球的市场份额首次超
过塞班系统,跃居全球第一。2012年11月数据显示,android占据全球智能手机操作系统
市场76%的份额,中国市场占有率为90%。目前基于android的移动终端上的软件应用开发很
火热,android平台的开发已越来越强大。android是一种以linux为基础的开放源码操作
系统,主要使用于便携设备。android操作系统最初由andy rubin创办,最初只支持手机。2005年由google收购注资,并拉拢多家制造商组成开放手机联盟(open handset alliance)
开发改良,逐渐扩展到到平板电脑及其他领域上。
二、实训主要任务、重点及难点 2.1、任务
认识移动互联网,了解移动互联网的开发,认识及了解android,在给定时间内完成基
于android平台的游戏项目的开发,实现预想游戏效果,熟悉项目开发的商业流程,给出游
戏全套文档及代码。
2.2、重点内容及实现途径
2.2.1、重点内容:熟悉游戏开发代码,了解项目流程,对android游戏开发有基本了解。 2.2.2、实现途径:
所需运行硬件环境:
安卓系统2.2以上 3.5寸以上移动设备软件开发环境的配置:
(1)配置java程序开发环境
(2)安装并汉化eclipse(jdk)
(3)android sdk的安装(4)adt的安装及配置
(5)android模拟器的配置
(6)office2003以上版本的软件(绘图visio)然后运用eclipse完成项目代码的编写,运行与调试; 最终在实体终端上进行测试,最终完成项目
三、实训具体内容及完成的主要工作 实训前期,有老师给我们讲解了现阶段移动互联网的发展,了解移动互联网的发展主流,说明了现阶段移动互联的发展重要性。老师着重给我们讲解了android的发展,以及现阶段
移动互联中android所扮演的角色。接下来我们将针对基于android的游戏开发进行学习,由于时间的原因,我们主要了解了一下游戏开发的基本项目流程,具体的操作将在实训过程
中一一讲解验证。
接下来老师为我们讲解了实训的具体内容,对于一个游戏开发项目,首先我们需要进行 游戏开发的前期准备,主要是游戏开发环境的配置,以及团队开发过程中的任务分配,之后
紧张的游戏项目开发拉开了帷幕。在第一天我们主要学习了eclipse软件的使用,包括游戏
工程的创建等等。并且针对eclipse中的 android项目结构进行了讲解:android项目结构:src/ java原代码存放目录 gen/ 自
动生成目录 gen 目录中存放所有由android开发工具自动生成的文件。目录中最重要的就是
r.java文件。这个文件由android开发工具自动产生的。res/ 资源(resource)目录 在这
个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。aets资源
目录android除了提供/res目录存放资源文件外,在/aets目录也可以存放资源文件。
androidmanifest.xml 项目清单文件。篇4:安卓实训报告实习报告书专 业计算机科学与技术系 别 报告题目 安卓 报告人 班 级指导教师 带队教师 实习时间 实习地点教务处监制 篇5:android实习心得 android实习心得
刚开始接触android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的android sdk开发范例大全中的例
子以及android提供的apidemos进行学习,尽管例子之间的连接比较零散,不过通过这些例
子的学习我可以学习到了很多和以前java上相通的思想。我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。1通过半个月的android实习,基本掌握了android应用程序开发的一般流程。对常用
控件基本掌握其用法,对其事件的监听方法也基本掌握。学习android不仅是对前沿开发技
术的了解,也是对编程知识的一次提升。2通过学习android的控件、布局、activity、service
等一系列基础知识,对整个android的开发有了大致的了解。例如: 要的布局(或者控件), 在学习界面中,我发现android为我们提供了很好的类似反射机制,通过layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比
较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建view
进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳
转intent管理,通过bundle对数据在界面之间进行传输。
4在手机交互式通信服务中,学习了android手机之间进行短信发送、广播、对广播的监听、服务等,在service类中没有context,可以通过handler来每秒反复运行,自动送
出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的currentactivity这个变量进行控制,进行处理。在android编程过程中巩固熟悉了java的编程。由于android应用程序的开发离不开 java的支持,所以基础的java知识是必须的。android系统是基于linux的手机操作系统平
台,要深入系统的学习android,不仅仅是有java和android应用开发,必须要具备linux,c/c++高级编程才能深入的涉及android framework和android内核开发。成为android开发的高素质人才。所以,在后续对android的学习中可能会看一些较底层的书籍。由于这次实习时间较短,对于android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到
了很多平时没有遇到或者没有特别关注的问题,如常见的activity忘记注册,对sd卡存取
需要权限,在写sql语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际
开发中才能体会到并且解决,并且在解决后可以长时间的记住。通过android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也 有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获
得了很多东西,提高了自己的编程技巧和编程方法,并且认识了android应用程序的开发,以及加深了对java的认识。
【篇3:android实习心得】
android实习心得
刚开始接触android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的android sdk开发范例大全中的例子以及android提供的apidemos进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。
我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。
1通过半个月的android实习,基本掌握了android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。2通过学习android的控件、布局、activity、service等一系列基础知识,对整个android的开发有了大致的了解。例如: 要的布局(或者控件),在学习界面中,我发现android为我们提供了很好的类似反射机制,通过layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建view进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转intent管理,通过bundle对数据在界面之间进行传输。
4在手机交互式通信服务中,学习了android手机之间进行短信发送、广播、对广播的监听、服务等,在service类中没有context,可以通过handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的currentactivity这个变量进行控制,进行处理。
在android编程过程中巩固熟悉了java的编程。由于android应用程序的开发离不开java的支持,所以基础的java知识是必须的。android系统是基于linux的手机操作系统平台,要深入系统的学习android,不仅仅是有java和android应用开发,必须要具备linux,c/c++高级编程才能深入的涉及android framework和android内核开发。成为android开发的高素质人才。所以,在后续对android的学习中可能会看一些较底层的书籍。
由于这次实习时间较短,对于android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的activity忘记注册,对sd卡存取需要权限,在写sql语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。
通过android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了android应用程序的开发,以及加深了对java的认识。
最后,通过实习,我收获了很多东西,特别是编程方面的,这对即将毕业的我们来说,这次实习是一次较为珍贵的充电,
第2篇:上海瑭锦安卓开发心得
上海瑭锦安卓开发心得
对于软件开发工程师来说学习C语言是一个必经得学习之路,因为他是编程语言中得基础,如果没有C语言得编写能力,那么就谈不上是软件开发工程师,所以学好C语言是成为软件开发工程师得基础,那么我们如何了解C语言呢?首先我们要知道C语言是汇编语言中最基础得编写语言,它集成了所有汇编语言得大部分优点,能实现低级语言得众多功能。
C语言把高级语言与低级语言相结合创造出自己得汇编语言风格,塑造出自己得汇编语言工作单元,C语言得结构特点是编写代码和相关数据可以分隔化除了程序和相关得必要信息保持彼此独立得关系,这种关系可以是我们编写得程序层次化更加清晰,更加便于使用、维护和调试,它会以给用户方便得调用功能,可以多元化、多种循环、控制编写语句得控制导向,从而使我们得编写程序更加结构化、实用化。
这些都可以让C语言实现决策目得得要求,C语言得应用指针特性使得其应用范围增加,应用面变大,增加了程序得安全性。不容易被恶意程序所利用,C语言得对其处理标准化、针对于编写函数得标记、多线程得支持、从新定义新得程序安全定义有了更多得广泛得选择。它得编写灵活和紧凑编写序列使得书写程序更加自由化,它可以直接访问我们常用得物理地址,简洁得使用操作使得用户在对硬件上得要求更加简洁,它可以移植%86得公共代码在相关得编写程序上,这一特性使得其在不同环境中运行。它得表达能力使得其在各种系统和相关运行环境下可以自由得发挥它得编写和使用得能力。
第3篇:如何学习安卓开发
如何学习安卓开发?安卓开发学习已经成为IT行业的新潮流。时下,Android也以其创造力、前瞻性、延续性和实现能力成为行业首领,可是怎么学好Android呢?今天,欧柏泰克的老师告诉你如何学好Android。
熟悉Java基础知识
Android应用的开发语言用的是Java语言,并且在Android中也用到了Java核心类库的大量的类,因此,在学习Android开发之前,可以先把Java基本语法和Java SE的基础类库好好学习一下。Android应用程序开发是以Java语言为基础的,所以没有扎实的Java基础知识,只是机械的照抄别人的代码,是没有任何意义的。建议在Android课程前期的Java学习阶段中,需要用心的学好。
熟悉一门编程语言
现在大学里面和计算机相关的专业甚至理工类专业一般都会开设C语言课程,只是很多同学在大学期间并没有好好学习,如果对它掌握的不太好或者很久没用了,建议先从将其好好复习一下,将其基本的语法再好好回顾一下,最好能搭建一个环境来运行、调试它。如果没有学过,不妨也提前学习一下。大部分的高校所开设的C语言使用的教材都是用它作为教材,因此无论是购买还是借阅,都容易找到;
熟悉数据结构和算法基础知识
如果后续有志于游戏方面的开发,最好具备一定的数据结构和算法基础知识。虽然现代的高级编程语言中,其类库中已经帮我们实现了大部分的数据结构,一般情况下,我们直接使用即可。但如果能对其原理有所了解,当需要在这些数据结构和算法中间的时候,可以更加的清楚到底应该选择哪个数据结构或者算法。另外,在图形图像处理上面,线性代数的作用也非常重要,如果能掌握一点这方面的基础知识,无疑也会在后续的学习中如虎添翼。
第4篇:安卓NFC开发学习笔记
大家学习android开发建议首选android开发文档,该文档在你下载的sdk中,路径:/sdk/docs/index.html
目前NFC应用的大的框架上的理解:
我使用的API LEVEL是19,支持的API有三个:android.nfc,android.nfc.cardemulator,android.nfc.tech NFC在手机上的应用大体分为两类:读卡器和卡
android.nfc.cardemulator接口是为NFC作为卡应用提供的接口,在较低版本的API上是没有的android.nfc.tech,android.nfc接口是为NFC作为读卡器应用提供的接口
首先说作为卡,nfc有两种实现方式,一个是使用NFC芯片作为卡,另一个是使用SIM作为卡
Figure 1.NFC card emulation with a secure element.至于从读卡器发送的指令到底是传递到NFC芯片还是SIM由NFC Controler控制,图中Secure Element是指SIM,Host-CPU指NFC芯片 android提供HostApduService用于NFC芯片,OffHostApduService用于SIM芯片,传递方向在res/xml文件中通过AID来控制
ps:Host-Based Card Emulator 简称为HCE
代码实现:
AndroidManifest.xml 中 配置service,因为作为卡实现的话,NFC功能是作为service存在的
android:permiion="android.permiion.BIND_NFC_SERVICE">
android:resource="@xml/apduservice"/>
res/xml/apduservice.xml 中配置service响应的AID
android:requireDeviceUnlock="false">
android:category="other">
配置文件完成后编写service的处理方法:
NFCService需要继承HostApduService,如果需要与Activity通信,建议采用广播方式
也可以自己实现观察者模式,只是这样就需要持有Activity的引用,感觉不太好 NFCService.java public cla NFCService extends HostApduService {
private Intent intent = new Intent("com.example.communication.RECEIVER");
@Override public void onCreate(){
//启动Acivity
Intent i = new Intent();
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//需要启动的Activity不是当前Activity的时候需要用FLAG_ACTIVITY_NEW_TASK
i.setAction("com.apdu.nfc");
getApplication().startActivity(i);
Toast.makeText(getApplicationContext(), "Service启动", Toast.LENGTH_LONG).show();
} @Override public byte[] proceCommandApdu(byte[] commandApdu, Bundle extras){//当注册的AID被选中后,后续指令被分发到这个处理函数中
byte[] sw = new byte[]{(byte)0x90,(byte)0x00};
byte[] response = new byte[5];
if(commandApdu[0]==(byte)0x00 &&commandApdu[1]==(byte)0xA4&& commandApdu[2]==(byte)0x04
&& commandApdu[4]==(byte)0x07&& commandApdu[5]==(byte)0xF0)
{
return sw;
}
else
{
//apdu处理逻辑
switch(commandApdu[1])
{
case(byte)0xA8:
break;
case(byte)0xAE:
break;
default:
return sw;
}
}
intent.putExtra("command", commandApdu);
intent.putExtra("response", response);
sendBroadcast(intent);//利用广播与Activity通信
return response;//SW值需要包含在response中
}
@Override public void onDeactivated(int reason){
if(reason==HostApduService.DEACTIVATION_DESELECTED)
{
Toast.makeText(getApplicationContext(), "已选择其它应用", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(getApplicationContext(), "连接断开", Toast.LENGTH_LONG).show();
} }
@Override
public void onDestroy()
{
Toast.makeText(getApplicationContext(), "Service关闭", Toast.LENGTH_LONG).show();super.onDestroy();
}
框架搭建好剩余的事情就很简单了,apdu的处理逻辑在proceCommandApdu方法中实现即可
以上是Host-CPU方式的实现,SIM方式,API介绍中说该方式没有提供可供操作的API,也就是说Android不会监听SIM卡与读卡器之间的通信
所以NFCOffService 只需要实现onBind接口,这样绑定该Service的Activity可以对NFCOffService进行有限操作 public cla NFCOffService extends OffHostApduService {
@Override public IBinder onBind(Intent intent){
// TODO Auto-generated method stub
return null;} } 上面没有提到的就是,如果你需要使用NFC,需要在Manifest中申请NFC权限: 现在来说说NFC芯片作为读卡器的应用场景以及实现
android.nfc.tech,android.nfc接口是为NFC作为读卡器应用提供的接口 接口定义了三种Action Tags:ACTION_NDEF_DISCOVERED,ACTION_TECH_DISCOVERED,ACTION_TAG_DISCOVERED。
当你在Manifest文件中将Activity的action-filter设置为这三个Tag中的一种或几种时,NFC响应事件会按照如图流程处理
我的理解是ACTION_NDEF_DISCOVERED 是用于两台NFC手机之间传输文件的ACTION_TECH_DISCOVERED,ACTION_TAG_DISCOVERED才是用于NFC与卡进行通讯的 所以开发第一步是在Manifest中配置你的Action:
android:resource="@xml/nfc_tech_filter" /> TECH_DISCOVERED还需要配置meta-data,meta-data的作用相当于补充说明或者一些配置信息 nfc_tech_filter.xml
android.nfc.tech.IsoDep
android.nfc.tech.NfcA
android.nfc.tech.NfcB
android.nfc.tech.NfcF
android.nfc.tech.NfcV
android.nfc.tech.Ndef
android.nfc.tech.NdefFormatable
android.nfc.tech.MifareClaic
android.nfc.tech.MifareUltralight
当然API中说明你可以将多个tech写在一个tech-list中,我做了尝试,这样做会引出一个问题,在程序未启动的情况下当手机刷卡时不会自动打开程序 如果想要自动打开需要按照上面这种写法,tech的个数可以根据你想要支持的卡类型进行调整
配置完成后,可以开始编写自己的Activity的java代码了
在onCreate方法中,需要获取NfcAdapter的引用,从名字可以看出这是一个适配器
NfcAdapter nfcAdapter;PendingIntent pendingIntent;@Override protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.pos_main);
dc =(Button)findViewById(R.id.button4DC);
ecc =(Button)findViewById(R.id.button4ECC);
qpboc =(Button)findViewById(R.id.button4QPBOC);
logWindow=(TextView)findViewById(R.id.communication4Financy);
nfcAdapter=NfcAdapter.getDefaultAdapter(this);
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getCla()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
onNewIntent(getIntent());} 这里使用PendingIntent,该Intent与普通的Intent不同的是它是有一个延迟启动的功能,它启动时会回调onNewIntent函数,这样能够实现NFC与Activity的交互
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getCla()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);的含义是将Intent传递给this Activity 在onPause与onResume中需要添加代码
public void onPause(){
super.onPause();
nfcAdapter.disableForegroundDispatch(this);}
public void onResume(){
super.onResume();
nfcAdapter.enableForegroundDispatch(this, pendingIntent, FILTERS, TECHLISTS);} enableForegroundDispatch的作用是,当NFC事件发生时如果当前Activity不是注册了NFC action-filter的Activity,手机会显示注册了NFC事件的Activity供用户选择
如果当前Activity注册了NFC action 则将事件优先交由当前Activity处理。onNewIntent实现:
@Override public void onNewIntent(Intent intent){
Parcelable p = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if(p==null)
{
return;
}
Tag nfcTag =(Tag)p;
final IsoDep isodep = IsoDep.get(nfcTag);// final NfcA isodep = NfcA.get(nfcTag);
final byte[] cmd = {(byte)0x00, // CLA Cla
(byte)0xB4, // INS Instruction
(byte)0x04, // P1 Parameter 1
(byte)0x00, // P2 Parameter 2
(byte)0x00, // Le
};
try {
isodep.connect();
byte[] reaponse=null;
logWindow.append("00B4040000"+'n');
try {
reaponse = isodep.getHistoricalBytes();
logWindow.append(Util.bytes2HexString(reaponse)+'n');
reaponse =isodep.transceive(cmd);
logWindow.append(Util.bytes2HexString(reaponse)+'n');
} catch(IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch(IOException e1){
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
try {
isodep.close();
} catch(IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
} } 首先需要获取Tag,Tag是操作NFC的基础
Parcelable p = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if(p==null)
{
return;
}
Tag nfcTag =(Tag)p;再将tag转换成特定的通讯协议 final IsoDep isodep = IsoDep.get(nfcTag);连接读卡器: isodep.connect();获取历史字节:
reaponse = isodep.getHistoricalBytes();响应指令:
reaponse =isodep.transceive(cmd);最后断开连接:(断开动作应该在Activity关闭或者pause的时候发生)finally{
try {
isodep.close();
} catch(IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
} onNewIntent里面可以实现业务逻辑的处理以及UI