Intent组件的安全机制

来源:互联网 发布:世界中心知乎 编辑:程序博客网 时间:2024/06/07 06:44

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"/>