Android6.0获取权限
照着《第一行代码》打代码,然并卵,感叹技术进步的神速。最后提醒一点:IT类的书籍一定要注意出版时间!出版时间!出版时间!重要的事情说三遍
问题出在android6.0的权限获取问题上,以前只要在AndroidManifest.xml一次性获取便可以了,android6.0之后要手动去获得运行时权限才行。或者将AndroidManifest.xml里的targetSdkVersion选为23以下,按6.0之前的权限模式来
1. 新增的api
ContextCompact.checkSelfPermission()--->检查是否有权限
ActivityCompat.requestPermission()--->去申请权限,ActivityCompat继承于ContextCompact
onRequestPermissionResult()-->请求权限是个异步的过程,所以要在回调里处理结果,在onRequestPermissionResult()里拿到用户是否授权,并做相应的处理。
ActivityCompat.shouldShowRequsetPermissionRationale()-->向用户解释权限用来做什么,在用户拒绝过才会出现
2.使用流程

3.例子
以打电话作为例子,首先在Manifest.xml中注册权限

然后在MainActivity.java中按照流程来便可以
package com.example.permissionadmin; import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity implements OnClickListener{ private Button callPhone; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
callPhone=(Button)findViewById(R.id.call_Phone);
callPhone.setOnClickListener(this);
} @Override
public void onClick(View v) {
// TODO Auto-generated method stub
//如果没有权限则请求权限,否则直接打电话即可
if(ContextCompat.checkSelfPermission(this,Manifest.permission.CALL_PHONE)!=
PackageManager.PERMISSION_GRANTED){
//第二个参数是数组表明可以一次性获取多个权限,后面的请求码要和回调处理函数的请求码对上
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);
}else{
doCallPhone();
}
} public void doCallPhone(){
Intent intent=new Intent(Intent.ACTION_CALL);
Uri data=Uri.parse("tel:"+"10086");
intent.setData(data);
this.startActivity(intent);
} @Override
/**
* 不同的请求码来对应不同的授权请求
* grantResults数组:权限请求结果
*/
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
if(requestCode==1){
if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
doCallPhone();
}else{
//提示用户权限未被授予
}
}
}
}
4.吐槽
学到《第一行代码》的第11章基于位置的服务,按照上面打代码位置始终无法显示,原来以为是权限问题,后来发现即使按照这上面的来还是无法显示自己的经纬度,所以将例子改成了打电话。现在的原因可能是:1.Gps室内无法定位。2.对于Network这种定位,默认用的是谷歌,无法使用。
想到的可能原因就是这两个了,希望有大神答疑解惑,谢谢啦!!!
Android6.0获取权限的更多相关文章
- Android6.0获取运行时权限
照着<第一行代码>打代码,然并卵,感叹技术进步的神速.最后提醒一点:IT类的书籍一定要注意出版时间!出版时间!出版时间!重要的事情说三遍 问题出在android6.0的权限获取问题上,以前 ...
- android6.0获取通讯录权限
android6.0中,获取通讯录的权限是 <uses-permission android:name="android.permission.GET_ACCOUNTS" ...
- android6.0以上权限动态申请,有视频链接可以看效果。
android6.0以上某些权限需要动态申请,虽然现在大多的手机系统版本在6.0,但是升级到6.0及以上是迟早的事,所以如何能够更好的控制动态申请权限时能有好的提示用户,及给用户带去更好的体验,是需要 ...
- Android6.0动态权限申请
goggle在Android6.0要求部分权限需要动态申请,直接下载AndroidManifest.xml中无效 6.0权限的基本知识,以下是需要单独申请的权限,共分为9组, 每组只要有一个权限申请成 ...
- Android6.0动态权限申请步骤以及需要注意的一些坑
因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的demo.算是自己的笔记吧,可能会比较混乱,主要是方便以后查看.后期有别的问题,随时更 ...
- 【Android开发】Android6.0请求权限方式
记录一下最普通的动态请求权限的方法: private int requestCode == 123; //判断当前系统的版本 if(Build.VERSION.SDK_INT >= 23){ i ...
- android 6.0获取权限
Android版本升到6.0后最坑的就是权限问题,以下是我参考大神一个权限管理工具类,希望对大家有用 PermissionUtils.java import android.Manifest; imp ...
- android6.0动态权限处理<一>
android 6.0以上为了保护用户的隐私,和以往被人诟病的权限机制,确立了新的权限机制.从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授 ...
- Android6.0 危险权限和普通权限
Normal Permissions如下 ACCESS_LOCATION_EXTRA_COMMANDS ACCESS_NETWORK_STATE ACCESS_NOTIFICATION_POLICY ...
随机推荐
- 阅读javascript高级程序设计
第一章 : javascript的简介: js的组成: 1.核心(ECMA) ECMA规定了js的 1,语法 2,保留字 3,关键字, 4,对象, 5,类型 6,操作符 7,语句 2.文档对象模型(D ...
- 使用discovery板上的st-link给别的板子下载
discovery板上的6pin swd接口 20pin 的jtag 接线: 6 20 def 1 1 目标vdd 2 9 swclk(PA14) 3 20 gnd 4 7 swdio(PA13) ...
- Docker 学习笔记(CentOS 7.1)
基本概念 Docker 包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository)理解了这三个概念,就理解了 Docker 的整个生命周期. Docker 镜像 D ...
- MVC的多表单
中心思想就是在一个表单内不规定"action",在js里面用@Url.Axtion("视图层","控制器")方法来设置表单的传值. 控制器 ...
- CentOS 7 / RHEL 7 – Open ports
Travis - June 13, 2015 - Leave a comment One of the most common things I do on Linux machines is op ...
- R语言拆分字符串
R语言拆分字符串 aaa<-"aa;bb;cc"ccc<-strsplit(aaa,split=";") bbb<- unlist(strsp ...
- oracle过滤字母
select regexp_replace(col,'[A-Za-z]') from dual; --> 12345col 列名
- 解决magento后台无法登陆/登陆没有反应的方法
安装过magento的几个版本,安装好后在登陆后台的时候都遇到了点问题,用户名和密码都输入正确,就是登陆不了后台,经过研究发现,登陆不了后台的主要是因为magento自身缓存设置的问题,最模板解决方法 ...
- Jmeter学习(一)
最近测了一个导出功能,感觉应该学习下Jmeter,WEB系统的性能系统还是需要有一定累积. 选择Jmeter而不是LR,很简单的原因是QTP和LR不能装一台机器上. 也有很多测试人员推荐Jmeter, ...
- 关于MySQL中的三种日期类型
Mysql中我们经常用来存储日期的数据类型有三种:Date.Datetime.Timestamp. Date数据类型用来存储没有时间的日期.Mysql获取和显示这个类型的格式为"YYYY-M ...