2.防止越权应用启动受保护的Activity。 3.对Broadcast发送者和接收者进行权限控制。 4.防止越权应用启动或者绑定受保护的Service。 5.防止越权应用访问操作受保护的ContentProvider。 为了在自己的应用程序中实施自己的权限控制,可以在AndroidManifest.xml文件中创建更多的<permission>标签来实现。形式如下: 〈manifest xmlns:Android=^http://schemas. Android. com/apk/res/Android〃 package="com. me. app. myapp" > 〈permission Android: name=/,com. me. app. myapp. permission.DEADLY_ACTIVITY" Android:label=//@string/permlab_deadlyActivity^ Android:description=^@string/permdesc_deadlyActivity^ Android: permissionGroup=//Android. permission-group. C0ST_M0NEY^ Android:protectionLevel=〃dangerous〃 /> 〈/manifest> <protectionLevel>标签是并且非常重要,它最重要的特性在于定义其他程序是否有权限申 请该权限,也就是说在Android系统中并不是想申请什么权限就获取什么权限的。权限定义者可以通过<protectionLevel>标签,限定申请者。protectionLevel分为0-3四个等级, 如果没有显示定义它,默认值为0,它的取值如下: 字符串 值 描述 normal 0 默认等级,低风险的权限。 dangerous 1 髙风险权限,需要用户确认 signature 2 包含相同签名的应用才能获取 signatureOrSystem 3 android系统镜像文件中的应用才能获取,或者与system有相同签名的应用才能获取,通常情况下不要使用该取值。 在源码中的frameworks/base/core/res/androidmanifest.xml中可以查看到系统提供 的权限列表。我们最关心的是androidprotectionLevel标签。因为作为第三方应用程序开发,能够申请的只有Android:protectid&Level取值为0,1的权限,其他的权限即使在 AndroidManifest. xml 文件中申请了也不会被系统赋予,比如 Android, permission. INSTM,L^^§KAGES 权限描述如下: 〈permission Android:name="Android.permission. INSTALL_PACKAGES'' Android:label=^@string/permlab_installPackages" Android:description=^@string/permdesc_installPackages" Android:protectionLevel=^signatureOrSystem^ /> 这决定了第三方应用程序即使在Androidmanifest.xml文件中申请了该权限也无法被赋予, 除非我们使用系统签名或者集成在Android系统镜像文件中。 在AndroidManifest.xml中可以对组件实施权限控制需要通过Android:permission标 签实现。在Activity组件中实施权限控制用来限制谁可以启动这个组件, Context. startActivity()或者 Activity. startActivityForResult ()函数触发权限检查。 在Service组件实施权控制用来限制谁可以启动或者绑定这个服务, Context. startService (), Context.stopService ()和 Context. bindService ()函数触发权限检查。在BroadcastReceiver组件实施权限控制限制谁可以发送broadcast到该组件。 Context.sendBroadcast()之后触发权限检查。相反Context.sendbroadcast()可以通过调用 Context.registerReceiver ()限制接收 broadcast 的组件。在 ContentProvider 组件实施权限控制限制谁可以访问该组件。ContentProvider提供一个额外的安全特性URI permissions补充单纯permission机制的不足。URI permissions似提供了两个分离的属性: Android:readPermission 和 Android:writePermission,前者用来限制谁可以读取该 URI, 后者限制谁可以写该 URI。ContentResolver. query ()ff^ Android:readPermission 权限, ContentResolver. insert (), ContentResolver. update (), ContentResolver. delete ()需要 Android:writePermission 权限。 Android权限列表 上节中已经讲到,在Android系统中应用程序如果要或得某一组件或者某一设备的访问权限,就需要在AndroidManifest.xml文件中申请相关的权限,本节对Android内置的权限进行详细的介绍,如果我们在程序开发中需要使用相关权限,就一定要在 AndroidManifest.xml 文件中申明。Android 2.1 提供的 Permission 如下: Android, permission. ACCESS_CHECKIN_PROPERTIES :允许读写 checkin 数据库中 properties 表(Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded) Android, permission. ACCESS_COARSE_LOCATION:允许一个程序访问 CellID 或 WiFi 热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi) location) Android, permission. ACCESS_FINE_LOCATION:允许一个程序访问精确位置(如 GPS) (Allows an application to access fine (e.g., GPS)Tlocation) Android, permission. ACCESS_LOCATION_EXTRA_COMMANDS:允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands) Android, permission. ACCESS_MOCK_mock_location:允许程序创建模拟位置提供用于测试 (Allows an application to create mock location providers for testing) |