Android中的权限问题

Android 传感器开发详解 > 转载请标明出处: [http://blog.csdn.net/airsaid/article/details/52902299](http://blog.csdn.net/airsaid/article/details/52902299) > 本文出自:[周游的博客](http://blog.csdn.net/airsaid) [TOC] #前言 Android系统提供了对传感器的支持,如 阅读详情

在Android程序中,在执行形如访问网络、读取联系人时都要声明权限,在 Android 系统版本小于6.0时,所有的权限只需要在AndroidManifest文件中声明就可以使用对应的功能了。 但是在Android6.0版本以上,Android将权限分为了普通权限和危险权限,其中普通权限的使用和以前的Android版本一样,直接在AndroidManifest文件中声明就行了,系统会自动帮我们授权,但是危险权限不仅要在AndroidManifest文件中声明,还需要在使用权限的时候通过代码来判断用户授权并且对用户授权的结果进行对应的处理。那么哪些权限是危险权限呢,下面给出了Android所有的危险权限,那么除了下表中的危险权限,其它的权限就都是Android普通权限了:

我们可以通过权限组的方式大致记一下危险权限:

1、读写日历:android.permission.READ_CALENDAR android.permission.WRITE_CALENDAR

2、使用相机: android.permission.CAMERA

3、读写联系人:android.permission.READ_CONTACTS android.permission.WRITE_CONTACTS android.permission.GET_ACCOUNTS

4、位置服务:android.permission.ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION

5、电话:android.permission.READ_PHONE_STATE android.permission.CALL_PHONE android.permission.READ_CALL_LOG android.permission.WRITE_CALL_LOG android.permission.ADD_VOICEMAIL android.permission.USE_SIP android.permission.PROGRESS_OUTGOING_CALLS

6、使用传感器:android.permission.BODY_SENSORS

7、短信:android.permission.SEND_SMS android.permission.RECEIVE_SMS android.permission.READ_SMS android.permission.RECEIVE_WAP_PUSH RECEIVE_MMS

8、读写手机储存:android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGE

好了,以上就是Android的所有危险权限,我们在使用这些权限的时候不仅要在AndroidManifest文件中声明,还需要在代码中对用户的授权情况进行处理,下面以一个简单的例子来看一下如何在代码中处理危险权限: 新建一个Android工程: activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    tools:context="com.example.administrator.blogandroidpermissiondeal.MainActivity">

    <EditText
        android:id="@+id/phonenumberEditText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="输入你想拨打的电话号码" />
    <Button
        android:id="@+id/callPhoneButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="拨打"/>

</LinearLayout>

很简单的布局文件,一行EditText控件用于,电话号码,一行Button用于拨打电话:: 接下来是MainActivity.java:

package com.example.administrator.blogandroidpermissiondeal;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button button = null;
    private EditText editText = null;
    private static final int PERMISSION_REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (EditText) findViewById(R.id.phonenumberEditText);
        button = (Button) findViewById(R.id.callPhoneButton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*
                 * 先判断用户以前有没有对我们的应用程序允许过打电话的权限,
                 * 如果有,那么直接打电话,如果没有,那么向用户申请,并且回调onRequestPermissionResult方法
                 */
                if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)
                        != PackageManager.PERMISSION_GRANTED) {
                    /*
                     * 下面是对权限进行申请,第二个参数填入权限名,如果有多个权限,那么第二个参数String数组加入多个权限参数
                     */
                    ActivityCompat.requestPermissions(MainActivity.this,
                            new String[]{Manifest.permission.CALL_PHONE}, PERMISSION_REQUEST_CODE);
                } else {
                    callPhonenumber();
                }
            }
        });
    }

    private void callPhonenumber() {
        try {
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:" + editText.getText().toString()));
            startActivity(intent);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
     * 当我们向用户申请权限的时候,用户操作的结果会调用这个方法,无论用户允许或者禁止,
     * 我们要在这个方法里面做出对应的处理
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            /*
             * 对传入的requestCode进行判断
             */
            case PERMISSION_REQUEST_CODE:
                // 如果用户授权
                if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    callPhonenumber();
                } else {
                    Toast.makeText(this, "打电话权限已被用户拒绝", Toast.LENGTH_SHORT).show();
                }
        }
    }

}

在MainActivity.java中我们对我们需要的权限进行了处理, 最后别忘了在AndroidManifest文件中声明打电话权限:

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

下面来运行一下:

我们输入一个号码,点击“拨打”按钮:

因为我们是第一次运行这个程序,所以用户以前并没有对我们的程序进行授权,因此出现权限申请对话框,我们点击DENY(否):

成功弹出了提示框,那么我们再试一次点击ALLOW(允许)试试:

成功的进入拨打电话的界面并且拨打我们输入的电话号码!

当我们允许了之后,那么程序以后就不需要再经过用户授权了,即可以直接拨打电话(除非用户在应用程序管理中收回了我们的打电话的权限)。

OK,危险权限和用户授权是Android6.0的新特性,也是为了让用户更加安全的使用程序,好了,如果博客中有什么不正确的地方,还请多多指点。

加群 4112676,可免费获取Android进阶资料

SDK23 读取联系人 权限拒绝 Permission Denial opening provider... requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS 权限拒绝 且在 mainfest里配置了权限 运行环境为 SDK23 阅读详情

相关推荐

android studio api 23 android 6.0 requires android.permission.READ_CONTACTS or android.permiss

Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{49af1fb 14363:com.example.gszczepanski.eduandroid/u0a59}

zzp880303的专栏 6551

android开发之调用手机陀螺仪功能代码,获取方位角度信息

在 onResume 方法中,我们注册陀螺仪传感器监听器,通过 sensorManager.registerListener() 方法注册监听器,并指定监听的传感器类型和更新频率。在本例中,我们使用 Sensor.TYPE_GYROSCOPE 作为传感器类型,并设置更新频率为 SensorManager.SENSOR_DELAY_NORMAL。然后,在 onCreate 方法中,我们将屏幕常亮标志设置为 FLAG_KEEP_SCREEN_ON,以保持屏幕始终亮着。在本示例中,我们未做特别处理。

程序员大爷 2452

【Android】关于selinux等引起的权限问题

本文章会持续更新问题背景1:在系统中间增加一个parameter分区,主要用来存储音频参数等硬件参数。但是在audioserver进程访问的时候出现权限问题 相关信息:Android N+MTK 如何创建分区打包成镜像放到手机? 在build/core/Makefile中间的修改如下: ## Generate an ext4 image TARGET_PARAMETER_OUT := $(PR

Joymine的专栏 2599

Android 6.0 permission 权限适配

1、获取危险权限列表,每个分组申请其中一个权限即可: bogon:~ hujason$ adb shell pm list permissions -d -f -g Dangerous Permissions: + group:android.permission-group.LGT_CONTENT package:android l...

weixin_33929309的博客 1047

Android SELinux 权限问题处理

前言 ​ SELinux 是 Google 从android 5.0 开始,强制引入的一种非常严格的管理机制,主要用于增强系统的安全性。SELinux有以下两种模式: enforcing mode: 限制访问 permissive mode: 只审查权限,不限制 1 确定 SELinux 问题 ​ 在调试过程中遇到权限问题时,可以通过如下方法,确定是不是由于 SELinux 导致的问题: 方法一: 通过串口或者adb使用如下命令,先将 selinux权限切换到审查模式: setenforce 0 (

it_rensheng的博客 3963

【安卓】HttpCanary抓包证书问题(需要有adb root权限)

HttpCanary抓包证书问题

weixin_43974127的博客 5450

关于安卓录屏的权限问题

关于安卓录屏的权限问题

每一天都有新的希望 1万+

Windows Server 2012 R2虚拟机安装全攻略:从镜像选择到网络配置一步到位

本文提供Windows Server 2012 R2虚拟机安装全攻略,涵盖从镜像选择到网络配置的完整流程。详细讲解在Oracle VM VirtualBox中的安装步骤、TCP/IP网络设置、系统优化及常见问题解决方案,帮助用户快速搭建可立即投入使用的服务器环境。特别适合IT初学者和系统管理员学习传统服务器应用的部署与配置。

weixin_28363123的博客 538

一个关于安卓apk权限的问题

在一个apk程序中调用了linux下的库函数settimeofday,此函数需要的权限是root,(linux的权限机制和安卓有所不同,linux的权限是相对用户来说,而安卓的权限是相对应用程序来说,linux的用户对应安卓的应用程序,详见网上文章)其他用户都无权使用,而apk的最高权限为system,所以按照网上的方法把apk程序的权限提升到system权限后,调用此函数依然没有权限执行。解决此

haomcu的专栏 1716

四十二、Fluent欧拉模型流化床模拟:从基础设置到颗粒动力学解析

本文详细解析了Fluent欧拉模型在流化床模拟中的应用,从基础概念到颗粒动力学设置全面覆盖。重点介绍了欧拉模型的颗粒温度概念、多相流配置技巧以及关键参数优化策略,帮助工程师准确模拟气固两相流动现象。通过实用案例演示了网格检查、求解器配置和边界条件设置的最佳实践。

weixin_27303545的博客 444

数据安全实战技能解析:从加密攻防到数字水印的竞赛指南

数据安全是信息安全领域的核心,其基础在于密码学与信息隐藏技术。密码学通过加密算法(如AES、RSA)和哈希函数,保障数据的机密性与完整性,其原理涉及对称/非对称加密、工作模式及密钥管理。数字水印技术则基于信号处理(如DCT/DWT变换),将信息嵌入多媒体载体,用于版权保护与溯源。这些技术的价值在于为数据全生命周期提供“防泄漏”与“可追溯”的解决方案,广泛应用于企业数据治理、合规审计和**数据防泄漏(DLP)** 系统。本文以一场贴近实战的**数据安全职业技能竞赛**为切入点,深入剖析如何运用密码分析、磁盘取

weixin_34314962的博客 402

安卓开发请求权限时报Unresolved reference: Manifest的问题

到这里就很显然了,这里Manifest和AndroidManifest.xml里的Manifest标签不是一回事.这里的Manifest.permission.XXX是android包的一个类,主要是用来定义权限的命令的名称.就好像c语言开发中的u8,u16一样,直接使用会有问题,必须要先定义才能使用.虽然确实是正常运行了,但是这显然不能解决我的疑惑,后来又找了一些程序,才发现别人正常运行的代码前面import都有一行。

a11910436_的专栏 1522

复用浏览器之跳过扫码登录

复用浏览器 1、通过命令启动浏览器:chrome --remote-debugging-port=9222(前提是退出所有的chrome浏览器) 2、启动浏览器之后,在地址栏输入127.0.01:9222,成功复用如下图所示:

qq_43911915的博客 2033

android 申请sdcard权限_快速解决安卓7.0系统写入SD卡权限失败的问题

如图所示,在mainfest文件中声明了SD卡的读和写权限,仍旧报错:安卓23.0版本以上,不仅仅要设置上面的权限,还要在对SD卡有读写操作的地方授权,下面是公共类:import android.Manifest;import android.app.Activity;import android.content.pm.PackageManager;import android.support.v...

weixin_39838362的博客 1201

UNet 改进(22):结合Transformer结构

保留了UNet的经典编码器-解码器结构在瓶颈层使用Transformer替代传统的卷积层采用跳跃连接保持空间细节信息使用双卷积块(DoubleConv)作为基础构建模块。

2401_82355416的博客 774

假新闻检测论文分享(17)CAFE(Cross-modal Ambiguity Learning for Multimodal Fake NewsDetection)

本文首先从信息论的角度对跨模态歧义性学习问题进行形式化描述,利用不同单模态特征之间的分布散度量化其歧义性;然后,提出了一种模糊度感知的多模态假新闻检测方法CAFE。CAFE通过自适应地聚合单模态特征和跨模态关联,即在跨模态歧义性较弱时依赖单模态特征,在跨模态歧义性较强时参考跨模态关联,从而提高假新闻检测精度。提出了跨模态歧义学习问题,这是多模态假新闻检测的一个关键挑战,并提出了一种基于KL散度的方法,通过估计其特征分布的散度来量化文本和图像之间的歧义。

weixin_41964296的博客 1724

小米手机 安卓 蓝牙 SPP 连接提示缺少android.permission.BLUETOOTH 权限问题解决

小米手机 安卓 蓝牙 SPP 连接提示缺少android.permission.BLUETOOTH 权限问题解决

qq627578198的博客 398

PD3.0详解 协议的时序timer和counter计数

前面介绍了关于PD协议的交互,还有协议层数据各个字段的含义,但是一直没有系统的说关于协议的时序,还有部分counter,就是协议允许发送的次数,或者一些其他计数。 大师匈今天说一下关于这方面的东西,这些东西都是非常关键的东西,但是相对来说PD标准内对时序的要求还是比较宽泛,非常容易能够实现这样的要求。 Timer 1、CRCReceiveTimer 0.9~1.1ms 表示每次通信收到goodcrc的时间,必须在这个时间内收到goodcrc, 我们要注意不是在0.9~1.1ms内,而是第三方可以在这个范

大师匈的博客 5007

安卓系统权限问题

对Android系统权限的认识 Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制 Android系统权限相关的内容 (一)linux文件系统上的权限 -rwxr-x--x system system 4156 2012-06-30 16:12 test.apk. 代表的是相应的用户/用户组及其他人对此文件的访问...

chenfeifei521的博客 485

大模型对齐的核心引擎:RLHF三阶段完整技术体系详解——从InstructGPT到ChatGPT与Claude 4.6的工程实践

RLHF从InstructGPT起步,经由ChatGPT、Claude系列的工程实践,已演变为现代大语言模型不可或缺的对齐基础设施。其三阶段流程——SFT构建基础能力基线,奖励模型将人类偏好编码为可微信号,PPO以KL约束驱动策略向偏好分布优化——构成了当代对齐技术的核心骨架。OpenAI的路线侧重于以海量人工标注和多目标奖励建模持续精细化RLHF流程,在规模与工程深度上持续推进;

nmdbbzcl的博客 1059

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android实例开发中的申请权限问题(android studio)

最近在进行android开发一些小的项目,中间的权限问题在很多项目中都存在,所以就在这里简单的整理一下,分享给初学者 权限问题 在我们做好一个项目时,这里以一个打电话的项目为例,权限主要分为两种 动态 就是在我们安装软件的同时,它会弹出询问你是否开启某一个权限(这里我们是打电话的权限). 静态 就是我们安装软件过程中不会弹出任何提示,需要我们自己到移动端的设置中进行开启。不开启不可以实现功能(这...

不会游泳的程序猿 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android ftp 权限设置,安卓P网络权限问题

android:usesCleartextTraffic 指示应用程序是否打算使用明文网络流量,例如明文HTTP。目标API级别为27(N)或更低的应用程序的默认值为“ true”。面向API级别28(P)或更高级别的应用默认为“ false”。当属性设置为“ false”时,平台组件(例如,HTTP和FTP堆栈,DownloadManager和MediaPlayer)将拒绝应用程序使用明文流量的...

weixin_34851493的博客 389

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android 获取照片 权限管理,安卓6.0以上 相册读取图片 权限问题

问题背景:今天做Intent ACTION_PICK 相册读取, 已经在AndroidManifest中添加了权限,然后选取后,图片无法显示。原因是:android6.0之后不仅需要在Mainfest里面添加权限,还需要添加运行时权限private static final int WRITE_PERMISSION = 0x01;@Overrideprotected void onCreate(B...

weixin_33502070的博客 2036

android 照片 权限管理,安卓6.0以上 相册读取图片 权限问题

问题背景:今天做Intent ACTION_PICK 相册读取, 已经在AndroidManifest中添加了权限,然后选取后,图片无法显示。原因是:android6.0之后不仅需要在Mainfest里面添加权限,还需要添加运行时权限private static final int WRITE_PERMISSION = 0x01;@Overrideprotected void onCreate(B...

weixin_36053019的博客 498

android 9.0申请多个权限,android中9.0权限问题

最近又在忙一个新项目了,也没怎么看技术的更新,鬼知道或遇到下面项目中遇到的问题啦!写了一点看代码看效果时到登陆页面时出现了下面的情况: 当遇到这种情况时不知道什么原因,以为是手机没有打开手机权限呢,就试着一步一步来了,就出现了下面的情况,如下图: 实在是之前没有遇到过这个问题,于是百度一下发现确实有这个案列啊,解决办法如下:在项目的自己创建的Application里面添加/*** 隐藏弹框 在MI...

weixin_39627052的博客 342

解决安卓11读写文件权限问题

最近在做适配管理,安卓11采用了新的内存分区模式,所以会出现权限问题,无法获取到权限,我们需要获取到全部文件读写权限,翻看安卓谷歌开发者文档后找到了解决办法,下面是解决方法。 // 操作将用户引导至一个系统设置页面,在该页面上,用户可以为您的应用启用以下选项:授予所有文件的管理权限。 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R || Environment.isExternalStorageManager()) {

qq_45796133的博客 7561
上一篇: Android插件化原理解析
下一篇: Android事件处理
动脑学院[David]
博客等级 码龄8年 44粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值