第一部分 activity
所谓activity 其实就是布满整个窗口或者悬浮于其他窗口上的交互界面。
一个应用程序通常由多个activity构成,都会在Manifest.xml中指定1个主的activity。
< activity
android: label= " @string/app_name"
android:name=".MainActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" >
<intent-filter >
</ activity>
onCreate: 当1个activity初次运行时,该方法被调用,里面的bundle类型的参数可以访问以前存储的状态。
onResume: 当1个Activity 开始和用户交互时,该方法被调用。这时,该activity是在Activity栈的顶部,处于前台进程中。可在这
个方法中去获取NFC数据(如读Tag的数据)。
onDestroy: Activity 被从内存中移除,一般发生在执行finish方法或者android回收内存时。
第二部分 intent filter
NFC的标签调用机制大量的使用了 Intent-Filter。
Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,android 则根据此Intent 的描述,负
责找到对应的组件,将Intent 传递给调用的组件,并完成组件的调用。
Intent不仅可用于应用程序之间,还可用于应用程序内部的 activity/service之间的交互。
专用于提供组件相互调用的信息,实现调用者与被调用者之间的解耦。
(1)Intent属性包括 action , data, type , category , component ,extras 等,每个属性既可以在Intent 类的方式进行设置,也可
以通过xml直接定义。
action: 字符串常量,指Intent将要完成的动作,如 ACTION_SCREEN_ON 为亮屏,可通过setAction来设置
Intent Action 属性, 通过getAction来获取 Intent Action 属性。
data:不同的action有不同的data
type: 数据类型,显式指定Intent的数据类型
category:类别,包含了处理该Intent的组件的种类信息,如 CATEGORY_HOME 表示回到HOME界面
component :直接指定目标组件类的名称,如果不指定,则会在以上4个属性中进行查找,找到1个匹配的组件。
Extras:附加信息,如果发邮件,可将标题正文保存在extras里,传递给对应组件
(2)Intent操作方式包括显式操作和隐式操作
显式操作:指定接收者
Intent intent = new Intent(Activity.Main.this,Activity2.class); // 指定了目标Activity2, android 不需要再去解析
startActivity(intent);
隐式操作:在构造 intent时,不指定接收者,有利于降低发送者和接收者之间的耦合。如NFC中的标签调度系统。
(3)intent 解析
通过查找已注册在AndroidManifest.xml中的所有intent-filter,将intent对象中的内容与intent-filter比较,android打开可以接收intent的组件
<activity android:name=".BeamShareActivity"
android:finishOnCloseSystemDialogs="true"
android:theme="@android:style/Theme.Translucent"
android:label="@string/android_beam"
android:noHistory="true"
android:excludeFromRecents="true">
<intent-filter> // 通过 action,type,category进行判断
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
</activity>