系统权限

声明权限

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.snazzyapp">

    <uses-permission android:name="android.permission.SEND_SMS"/>

    <application ...>
        ...
    </application>

</manifest>

运行时请求权限

自从安卓6.0起,需要授予权限在程序运行时而不是安装程序时。

系统权限又分为两种

  • 正常权限

    该种权限系统自动授权许可

  • 危险权限

    该种权限必须用户显式的授权

1、检查权限

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.WRITE_CALENDAR);

如果具有该权限,那么该函数返回 PackageManager.PERMISSION_GRANTED,否则返回 PERMISSION_DENIED,

2、请求权限

如果用户曾拒绝请求,再次需要权限时,可以通过 shouldShowRequestPermissionRationale() 用来解释为何使用该权限(比如弹出个对话框),再次询问是否授权

通过 requestPermissions() 授予权限,该函数会打开一个对话框让用户授权或拒绝,需要传入一个整型请求标识,以及请求的权限,该函数是异步的

// 检查是否有该权限
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // 是否需要解释,在拒绝一次后再次请求时会返回true
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation to the user *asynchronously* -- don‘t block
        // this thread waiting for the user‘s response! After the user
        // 看过解释后再次请求权限

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

3、 处理授权

在 requestPermissions() 打开的对话框关闭后,系统会调用 onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 来处理授权结果

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // 授权成功,授权后的操作

            } else {

                // 拒绝授权,提示运行需要该权限
            }
            return;
        }

        // other ‘case‘ lines to check for other
        // permissions this app might request
    }
}
时间: 2024-10-05 14:56:04

系统权限的相关文章

谈谈Oracle 数据库的系统权限UNLIMITED TABLESPACE

作者:赵全文 网名:guest 前日上午,开发同学反馈,应用程序在连接一套Oracle 11.2.0.4.0数据库的生产用户时,一直报"无操作表空间"的权限.于是,我赶紧连到SQLPLUS里进行查看该用户具有什么样的权限(包括系统权限.角色权限和对象权限),没有发现什么异常.大家都知道,一般在建立用户以后,都会给CONNECT和RESOURCE的角色权限.然后,我连到其它无报错的另一套Oracle 11.2.0.4.0数据库的生产用户上查看,两套数据库进行对比,发现报错的那套数据库没有

destoon 给超级管理员系统权限(管理员管理,日志管理等)

destoon 后台某些系统权限除了网站创始人之外其他超管事没有权限的,现需要给其他超级管理员添加普通管理员的权限. 1.首先  admin/global.func.php  admin_check函数 ,去掉admin  这样超管才能访问 ?file=admin } else if($_admin == 1) {?     //if(in_array($file, array('admin', 'setting', 'module', 'area', 'database', 'template

Android之——利用系统权限实现手机重启

在应用开发时经常会有这样的需求,如何在应用里用代码让手机重启,另外,我们知道在重启之后,我们的应用可以注册广播接收者,以保证我们的应用会第一个将我们的服务开启起来,这样我们的代码就可以第一个接收到接收短信的广播事件.好了,现在就让我们一起来实现一个利用系统权限实现手机重启的示例吧. 一.实现 我们实现很简单,就是给界面一个按钮,然后设置按钮的点击事情,在点击事件里完成手机重启操作. 1.布局文件 布局文件很简单,就是放置了一个Button按钮,设置点击事件. 具体代码如下: <LinearLay

Android系统权限及签名

Android系统权限及签名 2015-03-23 19:13:33CSDN-chen52671-点击数:50 Android权限及签名 引子 现象:系统中的一个定制Service,服务是对外开放的,使用系统签名 LOCAL_CERTIFICATE := platform 应用层调用这个系统服务,获取底层的一些信息.如果在IDE里进行开发,普通签名,无法调用到该服务, 改成在系统编译环境里编译,并在Android.mk中加入如下语句: LOCAL_CERTIFICATE := platforma

系统权限管理设计 (转)

权限设计(初稿)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.      2. 目标:      直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统解

Android如何通过shareduserid获取系统权限

转载:http://my.oschina.net/zhoulc/blog/119282 android会为每个apk进程分配一个单独的空间(比如只能访问/data/data/自己包名下面的文件),一般情况下apk之间是禁止相互访问数据的.通 过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的数据库和文件.就像访问本程序的数据一样(使用IPC机制,

OA系统权限管理设计(转载)

不论什么系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统加入亮点. l         不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最主要的功能. l         能够对"组"进行权限分配.对于一个大企业的业务系统来说,假设要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情.所以,系统中就提出了对"组"进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配. l 

Oracle笔记之对象权限与系统权限总结

对象权限与系统权限 创建表和创建session是系统权限: 系统管理员是有权限去訪问其它表的 以sys登录 sqlplus sys/on_change_install as sysdba; 创建用户wangwu create user wangwu identified by wangwu; 系统权限 grant create session to wangwu; grant create table to wangwu; grant unlimited tablespace to wangwu

linux系统权限大全

linux系统权限大全 一. 文件的归属: 文件所有者(owner).用户组(group).其它人(others) 二.查看 linux文件权限以及归属 ls 命令  ls -al  查看文件详细权限和属性 权限  r  w  x 三.设置文件目录的权限 1. 修改权限的命令  有  chmod   chown  chgrp 四.默认权限 1 .查看默认权限  umask   umask  -s 2 .更改默认权限  umask   xxx  直接接数字 五.文件或目录的隐藏属性 1. 设置文件

Android开发之深入理解Android 7.0系统权限更改相关文档

摘要: Android 6.0之后的版本增加了运行时权限,应用程序在执行每个需要系统权限的功能时,需要添加权限请求代码(默认权限禁止),否则应用程序无法响应:Android 7.0在Android 6.0的基础上,对系统权限进一步更改,这次的权限更改包括三个方面: APP应用程序的私有文件不再向使用者放宽 Intent组件传递file://URI的方式可能给接收器留下无法访问的路径,触发FileUriExposedException异常,推荐使用FileProvider DownloadMana