赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 手持终端

首页 > 专业技术 > 手持终端 > Android应用程序权限管理
Android应用程序权限管理

AndroidManifest.xml文件中包含了Android中所使用的Activity、Service和Receiver等,在该文件中可以通过<intent-filter>设置默认启动的Activity。AndroidManifest.xml文件中重要元素有:


元素

说明

manifest

根节点,描述package中所有的内容

xmlns:android

包含命名空间的声明

package

声明应用程序包

uses-sdk

应用程序所使用的Android SDK版本

application

包含package中Application级别组件声明的根节点

android:icon

应用程序的图标

android:label

应用程序的名称

activity

与用户交互的主要工具,是打开应用程序的初始界面

android:name

Activity的名称

intent-filter

声明指定的一组组件支持的Intent值

action

组件支持的Intent Action

category

组件支持的Intent Category,通常用来指定应用程序默认启动的Activity

在Android程序中,每一个Activity都需要在AndroidManifest.xml文件中有一个对应的<activity>标记;每一个Service也需要在其中有一个对应的<service>标记。

AndroidManifest.xml文件的基本结构为:

<?xml version="1.0" encoding="utf-8"?>
<manifest>
  <uses-permission/>
  <permission-tree/>
  <permission-group/>
  <instrumentation/>
  <uses-sdk/>
  <application>
    <activity>
      <intent-filter>
        <action/>
        <category/>
        <data/>
      </intent-filter>
      <meta-data/>
    </activity>
    <activity-alias>
      <intent-filter>...</intent-filter>
      <meta-data/>
    </activity-alias>
    <service>
       <intent-filter>...</intent-filter>
       <meta-data/>
    </service>
    <receiver>
       <intent-filter>...</intent-filter>
       <meta-data/>
    </receiver>
    <provider>
      <grant-uri-permission/>
      <meta-data/>
    </provider>
    <uses-library/>
    <uses-configuration/>
  </application>
</manifest>

<uses-feature>元素:
通过<uses-feature>元素可以为应用程序指定其所需的硬件功能,任何没有这些特定功能的设备在Google Play中查询时会被过滤掉,就看不到这些应用程序。<uses-feature>元素格式:
<uses-feature android:name="string" android:required={"true"|"false"} android:glEsVersion="integer"/>
其中,name属性指定功能,required属性指定该功能是必须还是可有可无,glEsVersion指定OpenGL版本。比如多点触摸功能:
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="true"/>
如果指定要使用OpenGL ES 2.0,就需要如下指定:
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
如果要使用接入usb接口的外部设备,比如游戏控制器,需要添加:
<uses-feature android:name="android.hardware.usb.host" android:required="false"/>

Google Play使用的过滤器不仅有<uses-feature>、<uses-sdk>元素和<uses-permission>元素,还有其他几种:
<support-screen>:声明应用程序可以运行的屏幕大小和密度
<uses-configuration>:声明对设备上的输入配置类型的支持,例如键盘、软键盘、触摸屏、轨迹球等
<uses-library>:声明应用程序所依赖的第三方库

Android应用程序权限明确指明了这个应用程序具备访问哪些资源的能力,需要在应用程序的AndroidManifest.xml文件中设置。在安装该应用程序时,向用户指明了该应用程序需要使用哪些资源,用户可以根据需要来选择是否安装该应用程序。
应用程序权限在Manifest.permission类中提供,见下表:


权限

说明

ACCESS_CHECKIN_PROPERTIES

允许在登入数据库时,读/写其中的属性表并上传改变的值

ACCESS_COARSE_LOCATION

允许应用访问范围性的定位,例如WIFI

ACCESS_FINE_LOCATION

允许应用访问精确性的定位,例如GPS

ACCESS_LOCATION_EXTRA
_COMMANDS

允许应用访问额外的提供定位的指令

ACCESS_MOCK_LOCATION

允许应用创建用于测试的模拟的定位提供者

ACCESS_NETWORK_STATE

允许应用访问网络上的信息

ACCESS_SURFACE_FLINGER

允许应用使用低版本视图的特征

ACCESS_WIFI_STATE

允许应用访问关于WIFI网络的信息

ACCOUNT_MANAGER

允许应用进入账户认证

ADD_SYSTEM_SERVICE

允许程序发布系统级服务

AUTHENTICATE_ACCOUNTS

允许应用为account_manager扮演一个账户认证系统

BATTERY_STATS

允许应用来统计电源信息

BIND_APPWIDGET

允许应用来告诉App Widget,哪个应用能够访问其数据

BIND_DEVICE_ADMIN

必须通过Administrator的请求来确保只有系统能够与之交流

BIND_INPUT_METHOD

必须通过Input Method Service的请求来确保只有系统能够与之绑定

BIND_WALLPAPER

必须通过Wallpaper Service的请求来确保只有系统能够与之绑定

BLUETOOTH

允许应用去连接蓝牙设备

BLUETOOTH_ADMIN

允许应用找到与之绑定的蓝牙设备

BRICK

被请求废止设备,该项应用用起来非常危险

BROADCAST_PACKAGE
_REMOVED

允许应用发出一个程序包被移除的广播消息

BROADCAST_SMS

允许应用发出一个收到短信的消息

BROADCAST_STICKY

允许应用发出一个与Intent相连的消息

BROADCAST_WAP_PUSH

允许应用发出一个收到WAP PUSH的广播消息

CALL_PHONE

允许应用启动一个用户确认电话被拨打的拨打程序,而不通过拨打电话的用户界面

CALL_PRIVILEGED

允许应用启动一个用户确认电话被拨打的任意号码(包括紧急号码)的拨打,而不通过拨打电话的用户界面

CAMERA

能够启动照相机设备的请求

CHANGE_COMPONENT
_ENABLED_STATE

允许应用程序启用或禁用其他组件

CHANGE_CONFIGURATION

允许应用修改当前的配置,例如本地设置

CHANGE_NETWORK_STATE

允许应用改变网络的连接状态

CHANGE_WIFI_MULTICAST
_STATE

允许应用进入WIFI的组播方式

CHANGE_WIFI_STATE

允许应用改变WIFI的连接状态

CLEAR_APP_CACHE

允许应用清除所有安装在设备上的应用的缓存

CLEAR_APP_USER_DATA

允许应用清除使用者的信息资料

CONTROL_LOCATION_UPDATES

允许从广播设备来更新或不更新本地的消息

DELETE_CACHE_FILES

允许应用删除掉缓存文件

DELETE_PACKAGES

允许应用删除掉程序包

DEVICE_POWER

允许低权限的访问电源管理项

DIAGNOSTIC

允许应用诊断程序资源

DISABLE_KEYGUARD

允许应用禁用键盘锁

DUMP

允许应用从系统服务中恢复转储的信息

EXPAND_STATUS_BAR

允许应用扩大或缩小状态栏

FACTORY_TEST

使用如制造商测试的应用一样,用终极权限用户运行

FLASHLIGHT

允许访问手电筒

FORCE_BACK

允许应用强制的返回操作,而不论是不是最终的activity

GET_ACCOUNTS

允许应用访问账目服务中的统计清单

GET_PACKAGE_SIZE

允许应用查找出任何程序包使用的空间

GET_TASKS

允许应用找到关于当前或最近运行的任务和在哪些activities里运行

GLOBAL_SEARCH

内容提供者可以使用这个权限来允许应用程序对其内部的数据使用全程搜索

HARDWARE_TEST

允许访问硬件及周边设备

INJECT_EVENTS

允许应用注入用户事件(如键盘、触摸)到事件中,然后提供给任意的窗口

INSTALL_LOCATION_PROVIDER

允许应用安装一个位置提供商到位置管理器

PACKAGES

允许应用安装程序包

INTERNAL_SYSTEM_WINDOW

允许应用打开被部分系统用户接口使用的窗口

INTERNET

允许应用打开网络套接口

KILL_BACKGROUND
_PROCESSES

允许应用去呼叫kill Background Processes(String)方法

MANAGE_ACCOUNTS

允许应用去管理账户管理者中的重要清单

MANAGE_APP_TOKENS

允许应用去管理(如创建、销毁、顺序)在窗口管理者中的应用

MASTER_CLEAR

允许应用清除一切数据

MODIFY_AUDIO_SETTING

允许应用修改全局音频设定

MODIFY_PHONE_STATE

允许改变拨打电话的状态、电源等

MOUNT_FORMAT_FILESYSTEMS

允许格式化可移除的存储仓库的文件系统

MOUNT_UNMOUNT
_FILESYSTEMS

允许安装或解除可移除的存储设备的文件系统

PERSISTENT_ACTIVITY

允许应用使其activities更持久稳固

PROCESS_OUTGOING_CALLS

允许应用监督、限定或终止呼出的电话

READ_CALENDAR

允许应用读取用户的日历数据

READ_CONTACTS

允许应用读取用户的联系人数据

READ_FRAME_BUFFER

允许应用抓取屏幕和更多可获得的缓冲数据

READ_HISTORY_BOOKMARKS

允许应用去读取(非写)用户浏览历史和书签

READ_INPUT_STATE

允许应用去检索当前键盘和控制的当前状态

READ_LOGS

允许应用读取低级别的系统日志文件

READ_OWNER_DATA

允许应用读取所有者的数据

READ_PHONE_STATE

允许应用读取电话的状态

READ_SMS

允许应用读取短信息

READ_SYNC_SETTING

允许应用读取同步的设置

READ_SYNC_STATS

允许应用读取同步的统计数据

REBOOT

重新启动设备的请求

RECEIVE_BOOT_COMPLETED

允许应用接收在系统完成启动后发出的ACTION_BOOT
_COMPLETED广播信息

RECEIVE_MMS

允许应用去监听多媒体信息并记录,以及对其进行处理

RECEIVE_SMS

允许应用去监听短消息并记录,以及对其进行处理

RECEIVE_WAP_PUSH

允许应用监听WAP push信息

RECORD_AUDIO

允许应用记录音频信息

RECORD_TACKS

允许应用改变任务的关系位置

RESTART_PACKAGES

(该项已废弃使用)

SEND_SMS

允许应用发送短消息

SET_ACTIVITY_WATCHER

允许应用查看和控制activities是怎样在系统中运行的

SET_ALWAYS_FINISH

允许应用去控制当activities被覆盖后,是否立即结束

SET_ANIMATION_SCALE

改变动画的比例因子

SET_DEBUG_APP

设置一个应用为调试模式

SET_ORIENTATION

允许低级别地设置屏幕的方向

SET_PREFERRED_APPLICATIONS

允许程序修改默认程序列表(该项已废弃使用)

SET_PROCESS_FOREGROUND

允许程序强制将当前应用程序转到后台运行

SET_PROCESS_LIMIT

允许应用设置可以运行的最大数量应用进程

SET_TIME

允许应用设置系统时间

SET_TIME_ZONE

允许应用设置系统时区时间

SET_WALLPAPER

允许应用设置壁纸

SET_WALLPAPER_HINTS

允许应用设置锁定的壁纸

SIGNAL_PERSISTENT
_PROCESSES

允许应用发出一个给所有稳定进程信号的请求

STATUS_BAR

允许应用打开、关闭或者使状态栏或图标失去作用

SUBSCRIBED_FEEDS_READ

允许应用访问内容提供者的签署认证

SUBSCRIBED_FEEDS_WRITE

允许应用访问内容提供者的签署认证

SYSTEM_ALERT_WINDOW

允许应用使用TYPE_SYSTEM_ALERT来打开窗口,并将窗口显示于其他应用的顶端

UPDATE_DEVICE_STATS

允许应用更新设备资料信息

USE_CREDENTITALS

允许应用从管理器得到授权请求

VIBRATE

允许应用访问震动器

WAKE_LOCK

允许使用电源锁定管理以使进程休眠或屏幕变暗

WRITE_APN_SETTINGS

允许应用去写入接入点设置

WRITE_CALENDAR

允许应用写(非读)用户的日历数据

WRITE_CONTACTS

允许应用写(非读)用户的联系人数据

WRITE_EXTERNAL_STORAGE

允许应用写(非读)用户的外部存储器

WRITE_GSERVICES

允许应用修改Google服务地图

WRITE_HISTORY_BOOKMARKS

允许应用写(非读)用户的浏览器历史和书签

WRITE_OWNER_DATA

允许应用写(非读)用户的数据

WRITE_SECURE_SETTING

允许应用写或读当前系统设置

WRITE_SETTINGS

允许应用写或读系统设置

WRITE_SMS

允许应用写短消息信息

WRITE_SYNC_SETTINGS

允许应用写同步设置

示例:
1)电话短信权限:
<uses-permission android:name="android:permission.CALL_PHONE" />
<uses-permission android:name="android:permission.SEND_SMS" />
2)定位权限:
<uses-permission android:name="android:permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android:permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android:permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
3)蓝牙权限:
<uses-permission android:name="android:permission.BLUETOOTH" />
<uses-permission android:name="android:permission.BLUETOOTH_ADMIN" />
4)WIFI权限:
<uses-permission android:name="android:permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android:permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android:permission.CHANGE_WIFI_STATE" />

Manifest.permission_group类:
此类提供了应用程序权限组,通过应用程序权限组,则可以一次声明而使用相关的所有权限资源:


权限组

说明

ACCOUNTS

直接通过统计管理器访问管理的统计

COST_MONEY

可以用来让用户花钱但不需要通过与他们直接牵涉的权限

DEVELOPMENT_TOOLS

与开发联盟特征相连的权限组

HARDWARE_CONTROLS

用来提供直接访问硬件设备的权限

LOCATION

用来允许访问用户的当前位置的权限

MESSAGES

用来允许应用发送用户收到的被拦截的信息

NETWORK

用来提供访问网络服务的权限

PERSONAL_INFO

用来提供访问用户私人数据的权限,如联系人、日历、电子邮件等

PHONE_CALLS

用于提供访问和修改拨号状态,如截取电话信息、读取和修改电话状态等的权限

STORAGE

与SD卡访问相关联的权限组

SYSTEM_TOOLS

与系统API有关联的权限组

 

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659