android 程序代码《第一行代码》一书中程序在真机上无法运行

Android第一行代码(九):运行时权限 - 简书
Android第一行代码(九):运行时权限
运行时权限
为了避免"店大欺客",譬如一些应用要求用户授权很多隐私权限,譬如定位、短信、摄像头权限,否则无法安装app的弊端,Android6.0 在原来权限机制的基础上 引入了 运行时权限 这个功能.
在Android中一共有上百种权限,其中危险权限一共9组24个。如下图:
危险权限.png
如果属于危险权限表中的权限,使用前先在AndroidManifest中声明,使用时需要进行 运行时权限处理 ;
如果不属于危险权限表中的权限,那么只需要在AndroidManifest.xml文件中添加一下权限声明就可以了。
所以不管是不是危险权限,使用该权限都要先在AndroidManifest文件中声明:
manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.a123.providertest"&
&uses-permission android:name="android.permission.CALL_PHONE"/&
&application
&/application&
&/manifest&
运行时权限处理
Android6.0系统 默认为 targetSdkVersion小于23 的应用授予了所申请的所有权限,所以如果你以前的APP设置的targetSdkVersion低于23,在运行时也不会崩溃。
而在targetSdkVersion大于等于23的系统中,我们需要在用到权限的地方,每次都检查是否APP已经拥有权限。 比如打电话功能,需要拨打电话的权限,我们需要在写入之前查看是否有CALL_PHONE权限,没有则申请权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
//申请WRITE_EXTERNAL_STORAGE权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE},1);
请求权限后,系统会弹出请求权限的Dialog:
请求权限.png
用户选择允许或拒绝后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
if(grantResults.length & 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT).show();
涉及到的关键点:
判断是否已授权,借助ContextCompat.checkSelfPermission()方法;接收两个参数
参数1:Context 上下文
参数2:具体权限名
比如 Manifest.permission.CALL_PHONE
返回值 和 PackageManager.PERMISSION_GRANTED做比较,相等说明已经授权,不等表示没有授权
若未授权,则需要借助ActivityCompat.requestPermission()方法,该方法接收3个参数:
参数1:Activity的实例
参数2:存放要申请的所有权限名的String数组
参数3:请求码,须唯一值
用户可以在手机Settings-&Apps-&对应应用-&Permissions中 选择对之前的授权进行关闭
Fragment中运行时权限的特殊处理
在Fragment中申请权限,不要使用ActivityCompat.requestPermissions,
直接使用Fragment的requestPermissions方法,否则会回调到Activity的onRequestPermissionsResult方法
如果在Fragment中嵌套Fragment,在子Fragment中使用requestPermissions方法,onRequestPermissionsResult不会回调回来。建议使用getParentFragment().requestPermissions方法,这个方法会回调到父Fragment中的onRequestPermissionsResult,加入以下代码可以把回调透传到子Fragment
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
List&Fragment& fragments = getChildFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
if (fragment != null) {
fragment.onRequestPermissionsResult(requestCode,permissions,grantResults);
阳春面 需要在运行时检测的权限 Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态检测,以下权限都需要在运行时判断: 身体传感器 日历 摄像头 通讯录 地理位置 麦克风 电话 短信 存储空间 运行时权限处...
Android6.0运行时权限描述 在旧的权限管理系统中,权限仅仅在App安装时询问用户一次,用户同意了这些权限App才能被安装。 在Android6.0开始,App可以直接安装,App在运行时一个一个询问用户授予权限,系统会弹出一个对话框让用户选择是否授权某个权限给App...
目前搭载android6.0以上版本系统手机占有量将近三分之一,具体如下图所示: 所以有必要将升级app的targetSdkVersion,但从Android6.0 以上开始,系统引入了一个新的应用权限模型,运行时权限模型(Runtime Permissions)。 运行时...
Android 6.0 运行时权限处理完全解析 运行时权限的变化及特点 对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录、短信...
上一篇我们介绍了Android M之后系统引入了新的权限管理机制即运行时权限管理,但是真正的要在自己项目中引入该机制,需要编写很多额外的代码,让人望而生畏!为了解决这个问题,很多网友为了能简化代码、降低使用难度,封装了很多优秀的权限库,主要有RxPermissions,An...
欣赏团队,欣赏队友,欣赏自己 欣赏就是放下自己的很多价值标准,不管好坏,欣赏它!不管美丑,欣赏它!当你用欣赏的眼光发现别人的闪光之处,再把他放在合适的位置上,就能人尽其才,发挥他最大的作用! 欣赏是源自发自内心的爱,是一种宽广的胸怀和能力。每个人都具有爱的能力,爱是人的天性...
我的错,是简单和绝对的。我爱的男人不值得我爱,他不值得我多看一眼。可是,我将我的爱给他,我全部的爱。爱情歪曲了我的判断,蒙住了我的双眼。
1964年,高仁尼,法国驻华大使馆的会计,对扮演日本女人的宋俪玲着了迷。初见,宋是一个冷淡,矜持的东方...
不知道大家还记不记得,曾经袁姗姗被全网皆黑的时候,反正无论什么事大家都要黑一把。特别是剧中洗澡的画面,被万能的网友称为番茄蛋花汤,这滋味~想想都酸爽! 接着,她沉浸了一段时间,以马甲线女王的称号重回大家视线,赢得不少好感。小编不禁想到,各种健身减肥的励志语,瘦了,身材好了,...
挑灯夜话41之厉害了,我的国 日新月异这个词,从诞生之日起就有渲染与扩大的成分。然而现在,走遍祖国大地,到处都有着翻天覆地的变化,这个词便是我们今天的真实写照。国庆期间,中央台连续的报道,就如它的一个栏目,使我们深深体会到,厉害了,我的国! “一桥飞架南北,天堑变通途。”当...拒绝访问 | www.ggdoc.com | 百度云加速
请打开cookies.
此网站 (www.ggdoc.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(d6843f5-ua98).
重新安装浏览器,或使用别的浏览器没有更多推荐了,
不良信息举报
举报内容:
《第一行代码——Android》
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!&>&《第一行代码——Android》(完整高清带目录版)
《第一行代码——Android》(完整高清带目录版)
上传大小:8.5MB
《第一行代码——Android》电子书,内容完整+高清+带目录+PDF。
综合评分:5
10积分/C币
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有3条
挺好用的哈。
非常好 非常好 非常清晰
听说评论给积分!
综合评分:
积分/C币:3
longzhanpeng
综合评分:
积分/C币:12
综合评分:
积分/C币:12
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
《第一行代码——Android》(完整高清带目录版)
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
《第一行代码——Android》(完整高清带目录版)}

我要回帖

更多关于 android小程序代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信