《NFC程序设计(三)自动运行程序.ppt》由会员分享,可在线阅读,更多相关《NFC程序设计(三)自动运行程序.ppt(27页珍藏版)》请在第壹文秘上搜索。
1、p1 1、检查上次作业、检查上次作业p2 2、检查预习题目、检查预习题目p3 3、上次课程的总结、上次课程的总结p4 4、NDEFNDEF的的UriUri格式结构格式结构p5 5、androidandroid应用程序记录的创建应用程序记录的创建p6 6、NFCNFC的前台调度系统的前台调度系统p7 7、应用示例、应用示例p8 8、本次课的作业、本次课的作业p9 9、下次课的预习内容、下次课的预习内容1 1、上次课的作业、上次课的作业 p编写一个电子名片标签的软件,要求能支持编写一个电子名片标签的软件,要求能支持NDEFNDEF文本格式文本格式读写。名片能显示姓名,电话号码等信息。读写。名片能显
2、示姓名,电话号码等信息。p1 1、检查上次作业、检查上次作业p2 2、检查预习题目、检查预习题目p3 3、上次课程的总结、上次课程的总结p4 4、NDEFNDEF的的UriUri格式结构格式结构p5 5、androidandroid应用程序记录的创建应用程序记录的创建p6 6、NFCNFC的前台调度系统的前台调度系统p7 7、应用示例、应用示例p8 8、本次课的作业、本次课的作业p9 9、下次课的预习内容、下次课的预习内容2 2、上次课预习内容、上次课预习内容1 1、anndroidanndroid应用程序记录(应用程序记录(AARAAR)2 2、让手机通过标签自动运行程序、让手机通过标签自动
3、运行程序3 3、让手机通过标签自动打开网页、让手机通过标签自动打开网页p1 1、检查上次作业、检查上次作业p2 2、检查预习题目、检查预习题目p3 3、上次课程的总结、上次课程的总结p4 4、NDEFNDEF的的UriUri格式结构格式结构p5 5、androidandroid应用程序记录的创建应用程序记录的创建p6 6、NFCNFC的前台调度系统的前台调度系统p7 7、应用示例、应用示例p8 8、本次课的作业、本次课的作业p9 9、下次课的预习内容、下次课的预习内容 1.1.在在onCreateonCreate()中获取()中获取NfcAdapterNfcAdapter对象;对象; 2. 2
4、.在在onNewIntentonNewIntent()中判断是否为()中判断是否为NDEFNDEF格式标签格式标签(ACTION_NDEF_DISCOVEREDACTION_NDEF_DISCOVERED),若是则获取),若是则获取NdefMessageNdefMessage信息;(需要强制转换成信息;(需要强制转换成NdefMessageNdefMessage对象)对象) Parcelable rawMsgs = Parcelable rawMsgs = getIntent().getParcelableArrayExtra(NfcAdapter.EXTgetIntent().getParc
5、elableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)RA_NDEF_MESSAGES) 3. 3.对对NdefMessageNdefMessage对象进行解析,获取相关的文本信息或对象进行解析,获取相关的文本信息或UriUri等。等。 1.1. 在在onCreateonCreate()中获取()中获取NfcAdapterNfcAdapter对象;对象; 2. 2.在在onNewIntentonNewIntent()中获取()中获取TagTag对象;对象;Tag tag = Tag tag = intent.getParcelableExra(NfcA
6、dapter.EXTRA_TAG);intent.getParcelableExra(NfcAdapter.EXTRA_TAG); 3. 3.通过通过TagTag创建创建NdefNdef对象;对象; Ndef ndef = Ndef.get Ndef ndef = Ndef.get(tagtag);); 4. 4.将文本等数据封装成将文本等数据封装成NdefMessageNdefMessage; 5.5.判断是否为判断是否为NDEFNDEF格式标签,格式标签, 若是若是NDEFNDEF格式:格式: (1 1)允许进行标签操作)允许进行标签操作: :ndef.connectndef.connec
7、t();(); (2) (2) 调用调用ndef.writeNdefMessagendef.writeNdefMessage( (NdefMessageNdefMessage) )方法写入方法写入。 若非若非NDEFNDEF格式:格式: (1 1)获得可以格式化和向标签写入数据的)获得可以格式化和向标签写入数据的NdefFormatableNdefFormatable对象;对象;NdefFromatableNdefFromatable format = format = NdefFromatable.getNdefFromatable.get();(); (2 2)允许进行标签操作)允许进行标
8、签操作: :format.connectformat.connect();(); (2) (2) 调用调用format.formatformat.format( (NdefMessageNdefMessage) )方法写入。方法写入。1.1.可通过可通过NdefRecord.getTnf()NdefRecord.getTnf()方法来获得方法来获得TNFTNF字段;字段;2.2.通过通过NdefRecord.getType()NdefRecord.getType()方法来获得方法来获得RTDRTD字段,当字段,当TNFTNF为为TNF_WELL_KNOWNTNF_WELL_KNOWN时的时的R
9、TDRTD。3.3.通过通过NdefRecord.getPayload()NdefRecord.getPayload()方法来获得实际读写的数据。方法来获得实际读写的数据。4.4.通过通过NdefRecord.getId()NdefRecord.getId()方法来获得方法来获得NFCNFC标签的标签的IDID号。号。1 1、NdefMessageNdefMessage中的中的p paylaodaylaod就是实际的数据,其中就是实际的数据,其中NDEFNDEF文本格式文本格式为:为:payload0payload1payloadn状态字节状态字节ISO语言编码语言编码(ASCLL)文本数据文
10、本数据(UTF8/UTF16)0:UTF-81:UTF-160语言编码长度语言编码长度(5-0)p1 1、检查上次作业、检查上次作业p2 2、检查预习题目、检查预习题目p3 3、上次课程的总结、上次课程的总结p4 4、NDEFNDEF的的UriUri格式结构格式结构p5 5、androidandroid应用程序记录的创建应用程序记录的创建p6 6、NFCNFC的前台调度系统的前台调度系统p7 7、应用示例、应用示例p8 8、本次课的作业、本次课的作业p9 9、下次课的预习内容、下次课的预习内容1 1、 NDEFNDEF格式中与格式中与UriUri相关的类型有:相关的类型有:TNF_ABSOLU
11、TE_URI(TNF_ABSOLUTE_URI(直接直接UriUri格式格式) );TNF_WELL_KNOWNTNF_WELL_KNOWN中中RTD_URIRTD_URI(带前缀表,需要解码)。(带前缀表,需要解码)。2 2、NdefMessageNdefMessage中的中的paylaodpaylaod就是实际的数据,其中就是实际的数据,其中NDEFNDEF文本格式文本格式为:为:2 2、前缀需要查表解析、前缀需要查表解析payload0payload1payloadnUri前缀前缀具体数据(具体数据(UTF8)p1 1、检查上次作业、检查上次作业p2 2、检查预习题目、检查预习题目p3
12、3、上次课程的总结、上次课程的总结p4 4、NDEFNDEF的的UriUri格式结构格式结构p5 5、androidandroid应用程序记录的创建应用程序记录的创建p6 6、NFCNFC的前台调度系统的前台调度系统p7 7、应用示例、应用示例p8 8、本次课的作业、本次课的作业p9 9、下次课的预习内容、下次课的预习内容5 5、androidandroid应用程序记录应用程序记录1 1、在、在Android4.0Android4.0中引入应用程序记录(中引入应用程序记录(AARAAR),当扫描到写入),当扫描到写入AARAAR的的NFCNFC标签时,启动相应的应用程序。标签时,启动相应的应用
13、程序。2 2、AARAAR有嵌入到有嵌入到NdefRecordNdefRecord内部的应用程序包名。内部的应用程序包名。AndroidAndroid会针对会针对AARAAR来搜索整个来搜索整个NdefMessageNdefMessage,如果找到一个,如果找到一个AARAAR,就会基于,就会基于AARAAR内部的包名来启动应用程序。内部的包名来启动应用程序。3 3、NFCNFC标签调度系统对包含标签调度系统对包含AARAAR标签的调度:标签的调度: 1.1.若跟若跟IntentIntent匹配的匹配的ActivityActivity也跟也跟AARAAR匹配,则启动该匹配,则启动该Activi
14、tyActivity; 2.2.若跟若跟IntentIntent匹配,而跟匹配,而跟AARAAR不匹配,则启动不匹配,则启动AARAAR指定的应用指定的应用程序;程序; 3.3.如果没有跟如果没有跟AARAAR对应的应用程序,则启动各种市场来下载对对应的应用程序,则启动各种市场来下载对应基于应基于AARAAR的应用程序。的应用程序。androidandroid应用程序记录创建方法应用程序记录创建方法1、调用NdefRecord类的creatApplicationRecord()方法来创建应用程序记录。2、将所创建的AAR嵌入到NdefMessage中。NdefMessage msg = new
15、 NdefMessage(new Ndefrecord,NdefRecord. creatApplicationRecord(“com.example.android.beam”)3、除非AAR是你NdefMessage中的唯一记录,否则不要将AAR嵌入到NdefMessage的第一条记录。ActivityActivity中的中的onNewIntentonNewIntent方法方法 p如果如果IntentActivity处于任务栈的顶端,也就是说之前打开过的处于任务栈的顶端,也就是说之前打开过的Activity,现在,现在处于处于onPause、onStop状态的话,其他应用再发送状态的话,其
16、他应用再发送Intent的话,执行顺序为:的话,执行顺序为:onNewIntent,onRestart,onStart,onResume。plaunchMode为为singleTask的时候,通过的时候,通过Intent启到一个启到一个Activity,如果系统如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的再调用通常情况下我们处理请求数据的onCreate方法,而是调用方法,而是调用onNewIntent方法。方法。p系统可能会随时杀掉后台运行的系统可能会随时杀掉后台运行的 Activity ,如果这一切发生,那么系统就会调,如果这一切发生,那么系统就会调用用 onCreate 方法,而不调用方法,而不调用 onNewIntent 方法,一个好的解决方法就是方法,一个好的解决方法就是在在 onCreate 和和 onNewIntent 方法中调用同一个处理数据的方法。方法中调用同一个处理数据的方法。ponNewIntent()中的中的setInte