Android 之System Permission


每一个应用都运行在本身的砂箱中,而且具备不一样的UserId和进程。android

  1. 签名
    每一个开发者都具备本身的私有签名key,
  2. User IDs and File Access
    因为每一个应用都具备本身的UserID和进程号,所以其打开的文件也都只能本身访问。若须要两个app共享文件,那么须要两个app设置shareUserId而且使用相同的签名。
  3. 使用权限
    uses-permission,声明在Manifest中
xml<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.app.myapp" >
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    ...
</manifest>
  1. 声明和强制权限
    自定义本身的权限,须要在Manifest中使用<permission>tag首先声明。如:
<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.COST_MONEY"
        android:protectionLevel="dangerous" />
    ...
</manifest>

其中description是对该权限的解释,将在用户安装App时显示。permissionGroup是表示该权限所属组,如本例中的消费金钱。protectionLevel是方便Android在安装时以何种方式通知用户,本例为危险,由于须要花钱。
可使用Settings App查看个App的应用权限,或者使用cmd
adb shell pm list permissions -sshell

  1. Manifest中的强制Permission
    对四大组件都可以在其tag中设定权限,若是某个调用者无权限调用该组件,将会获得 SecurityException的异常。其中ContentProvider具备写入权限和读取权限两种。
  2. URIs Permission
    对于某些应用而言,其数据比较私密,对于不具有权限的App根本没法读取或者写入。如Email中的图片,当调用其余App来显示该图片时,因为不具有读取权限,于是报异常。所以呢,Android引入了URI权限,即在发送Intent时,附带 Intent.FLAG_GRANT_READ_URI_PERMISSION 和或者Intent.FLAG_GRANT_WRITE_URI_PERMISSION
相关文章
相关标签/搜索