1) Intent和IntentFilter简介
Intent(意图)本身是一个包含被执行操作抽象描述的被动的数据结构,对于广播而言,是某件已经发生并被声明的事件的描述。在Android系统中,存在如下几种不同的机制来传送Intent到每种组件中。
(1) 一个Intent对象传递给Context.startActivity()或Context.startActivityForResult()以启动一个活动,或者让一个存在的Activity去做某些事情。
(2)一个Intent对象是传递给Context.startService()来发起一个服务或者递交新的指令给运行中的服务。一个Intent能被传递给Context.binderService(),在调用组件和一个目标服务之间建立连接。
(3) 传递给任意广播方法(Context.sendBroadcast()等)的Intent对象被传递给所有感兴趣的广播接收者。
2) Intent组件的通信安全机制
在Android系统中,应用程序中的Activity、Service、Broadcast Receiver等组件之间需要通过Intent组件进行通信,组件之间的通信需要在文件AndroidManifest.xml中暴露组件,但是很多风险就是由于不恰当的组件暴露引起的。
在Android系统中有两种使用Intent的用法的:
①显式的Intent,即在构造Intent对象时就指定接收者;
②隐式的Intent,即Intent的发送者在构造Intent对象时无需知道也无需关心接收者是谁,这有利于降低发送者和接收者之间的耦合。
3)设置组件的访问权限
在Android系统中可以设置调用组件或公开的广播、服务的权限,设置权限的方式有如下三种:
①在被调用的组件中添加android:permission属性,例如:
<activity android:name="com.socsi.testActivity"
android:permission="com.socsi.permission"
</activity>
②声明<permission>属性,例如:
<permission android:description="test"
android:label="test"
android:name="com.socsi.permission"
android:protectionLevel="normal">
</permission>
③调用组件者声明<uses-permission>,例如:
<users-permission android:name="com.socsi.permission"/>