照着《第一行代码》打代码,然并卵,感叹技术进步的神速。最后提醒一点: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获取运行时权限的更多相关文章

  1. 【Android】打电话Demo及Android6.0的运行时权限

    新手开局,查看一些旧资料,从打电话.发短信的小应用开始.代码很简单,主要是学习了: 用StartActivity()激活一个Activity组件.这里是激活了系统原生的打电话和发短信Activity. ...

  2. Android 6.0的运行时权限

    原文  http://droidyue.com/blog/2016/01/17/understanding-marshmallow-runtime-permission/ 主题 安卓开发   Andr ...

  3. 聊一聊 Android 6.0 的运行时权限

    权限一刀切 棉花糖运行时权限 权限的分组 正常权限 正常权限列表 特殊权限危险权限 请求SYSTEM_ALERT_WINDOW 请求WRITE_SETTINGS 必须要支持运行时权限么 不支持运行时权 ...

  4. 聊一聊Android 6.0的运行时权限

    Android 6.0,代号棉花糖,自发布伊始,其主要的特征运行时权限就很受关注.因为这一特征不仅改善了用户对于应用的使用体验,还使得应用开发者在实践开发中需要做出改变. 没有深入了解运行时权限的开发 ...

  5. 安卓从业者应该关注:Android 6.0的运行时权限

    Android 6.0,代号棉花糖,自发布伊始,其主要的特征运行时权限就很受关注.因为这一特征不仅改善了用户对于应用的使用体验,还使得应用开发者在实践开发中需要做出改变. 没有深入了解运行时权限的开发 ...

  6. Android6.0运行时权限(基于RxPermission开源库)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 在6.0以前的系统,都是权限一刀切的处理方式,只要用户安装,Manifest申请的权限都会被赋予,并且安装后权限也撤销不了. And ...

  7. Android权限管理之Android 6.0运行时权限及解决办法

    前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...

  8. Android开发学习之路-Android6.0运行时权限

    在Android6.0以后开始,对于部分敏感的“危险”权限,需要在应用运行时向用户申请,只有用户允许的情况下这个权限才会被授予给应用.这对于用户来说,无疑是一个提升安全性的做法.那么对于开发者,应该怎 ...

  9. Android6.0获取权限

    照着<第一行代码>打代码,然并卵,感叹技术进步的神速.最后提醒一点:IT类的书籍一定要注意出版时间!出版时间!出版时间!重要的事情说三遍 问题出在android6.0的权限获取问题上,以前 ...

随机推荐

  1. Java 端口扫描器 TCP的实现方法

    想必很多朋友都实现过一个简易的聊天室这个功能,其中涉及到Socket套接字这个类,我们通过一个特定的IP以及特定的端口创建一个服务端的套接字(ServerSocket),以此我们聊天个体的套接字(So ...

  2. 查看lwjgl常用状态的值

    在遇到状态值较多较复杂的情况,可以选择使用GL11.glIsEnabled()或者GL11.glGet()函数来查看状态机值,以下是常用值: public static void printOpenG ...

  3. ASP.NET 概述

    https://msdn.microsoft.com/zh-cn/library/4w3ex9c2(VS.100).aspx ASP.NET 概述 更新:2007 年 11 月 ASP.NET 是一个 ...

  4. SSH面试集锦——不看后悔哦!

    1.        谈谈你mvc的理解 MVC是Model-View-Controler的简称.即模型-视图-控制器.MVC是一种设计模式,它强制性的把应用程序的输入.处理和输出分开. MVC中的模型 ...

  5. 解决hadoop 集群启动常见错误办法

    hadoop 集群常见错误解决办法 hadoop 集群常见错误解决办法: (一)启动Hadoop集群时易出现的错误: 1.   错误现象:Java.NET.NoRouteToHostException ...

  6. 【bzoj1977】[BeiJing2010组队]次小生成树 Tree 最小生成树+权值线段树合并

    题目描述 求一张图的严格次小生成树的边权和,保证存在. 输入 第一行包含两个整数N 和M,表示无向图的点数与边数. 接下来 M行,每行 3个数x y z 表示,点 x 和点y之间有一条边,边的权值为z ...

  7. JavaScript归并方法reduce()和reduceRight()

    ECMAScript 5还新增了两个归并数组的方法:reduce()和reduceRight().这两个方法都会迭代数组的所有项,然后构建一个最终返回的值.其中,reduce()方法从数组的第一项开始 ...

  8. 大步小步算法模板题, poj2417

    大步小步模板 (hash稍微有一点麻烦, poj不支持C++11略坑) #include <iostream> #include <vector> #include <c ...

  9. 后缀数组 模板题 hdu1403(最长公共(连续)子串)

    好气啊,今天没有看懂后缀树和后缀自动机 只能写个后缀数组发泄一下了orz #include <cstdio> #include <cstring> *; int wa[N], ...

  10. [洛谷P4940]Portal2

    题目大意:维护两个栈,几个操作: $PUSH\;x\;num:$把$num$压入栈$x$ $POP\;x:$弹出栈$x$栈顶元素 $ADD\;x:$取出两个栈栈顶,把相加值压入栈$x$ $SUB\;x ...