android权限的变化

在Android6.0以前的版本的时候,Android的权限都是在安装的时候全部的配置完成的。然而这往往会造成一些安全的问题。

Google的解决办法:

将Android中的权限分为了两大类:

Normal:权限不会直接涉及到用户的隐私。如果你的应用在manifest清单文件中配置了此类的权限,那么系统会自动的同意。

Dangerous权限能够让应用去访问用户的隐私数据。如果你的应用在manifest中配置了此类的权限,那么久得需要用户同意此类权限。

注意:

         如果你的应用需要一个dangerous权限,那么在每一次执行需要这个权限的操作时,你必须检查是否有这个权限。应用用户总是可以取消这个权限的,并不能认为一次同意永久拥有。

         不管是 Normal 还是 Dangerous 权限 都需要在清单文件中进行配置 


 
Demo代码:

 package com.example.it.android_callphone;

 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; import java.net.URI;
import java.security.Permission;
import java.util.jar.Manifest; public class MainActivity extends AppCompatActivity { int REQUEST_CALL_PHONE_PERMISSION=0;
Intent intent;
EditText txtNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btnCall =(Button) findViewById(R.id.btnCall);
txtNumber =(EditText)findViewById(R.id.txtNumber); btnCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//如果有权限直接执行
if(ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.CALL_PHONE)==PackageManager.PERMISSION_GRANTED){
intent = new Intent();
//添加打电话的动作
intent.setAction(Intent.ACTION_CALL);
//添加数据
String number = txtNumber.getText().toString().trim();
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
//如果没有权限那么申请权限
else{
ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.CALL_PHONE},REQUEST_CALL_PHONE_PERMISSION);
}
}
});
} /*
* 当请求获取权限后会执行此回调方法,来执行自己的业务逻辑
* */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode==this.REQUEST_CALL_PHONE_PERMISSION){ if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
//执行自己的业务逻辑
startActivity(intent);
}else{
Toast.makeText(this, "拒绝了权限", Toast.LENGTH_SHORT).show();
}
}
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
}

Android动态获取权限的更多相关文章

  1. Android 动态申请权限问题【转】

    Android 动态申请权限问题 感谢大佬:https://www.jianshu.com/p/2324a2bdb3d4 感谢大佬:https://blog.csdn.net/weixin_42910 ...

  2. android 6.0之后动态获取权限

    Android 6.0 动态权限申请   1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...

  3. Android6.0以上系统动态获取权限

    动态权限的申请方法: 1.首先,需要在AndroidManifest.xml静态申请权限,否则无法动态申请权限: <uses-permission android:name="andr ...

  4. android:动态申请权限(一)

    环境: android版本6.0 对应SDK版本23 动态申请权限说明:所有动态申请的权限,必须在AndroidManifest.xml中进行声明 步骤 1.新建一个android工程 默认创建即可 ...

  5. Android6.0动态获取权限

    Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权 ...

  6. Android 6.0以上动态获取权限

    首先在清单文件中注册 然后在MainActivity.java中将权限封装到一个String数组中 static final String[] PERMISSION = new String[]{ M ...

  7. QT 安卓动态获取权限

    一:在AndroidManifest.xml文件中赋予相关权限 二: package ckdz.Appproject; import android.Manifest; import android. ...

  8. Android 动态申请权限

    AndroidManifest.xml(清单文件)添加需要的权限 <uses-permission android:name="android.permission.ACCESS_CO ...

  9. Android 动态获取ListView的高度

    public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = l ...

随机推荐

  1. Java访问权限控制

    访问权限控制           java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的.访问权限控制的等级,从最大权限到最小权限依次是:public.prote ...

  2. javascript鼠标拖拽的那些事情

    <html> <head> <title>javascript鼠标拖拽的那些事情</title> <meta http-equiv="C ...

  3. Linux - awk 文本处理工具四

    awk 常用示例 获取本机 IP 方式 /sbin/ifconfig |awk -v RS="Bcast:" '{print $NF}'|awk -F: '/addr/{print ...

  4. 第13月第25天 ios11 uitableview reloaddata contentsize

    1. [tableView reloadData]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_ ...

  5. google浏览器测试时清理缓存、强制不用缓存刷新快捷键(常用、效率)

    Ctrl+Shift+Del  清除Google浏览器缓存的快捷键  Ctrl+Shift+R  重新加载当前网页而不使用缓存内容

  6. HDU 6395 Sequence 杜教板子题

    题目意思非常明确,就是叫你求第n项,据我们学校一个大佬说他推出了矩阵,但是我是菜鸡,那么肯定是用简单的方法水过啦!我们先p^(1/2)的复杂度处理出i=[i,p]范围内的所有种类的(int)(p/i) ...

  7. Servlet笔记7--HttpServletRequest介绍

    通过HttpServletRequest获取表单提交的数据: 前端页面: <html> <head> <title>register</title> & ...

  8. Insert Interval & Merge Intervals

    Insert Intervals Given a non-overlapping interval list which is sorted by start point. Insert a new ...

  9. lvs+keepalived+nginx实现高性能负载均衡集群【转】

    转自 lvs+keepalived+nginx实现高性能负载均衡集群 - 青衫lys - 博客园http://www.cnblogs.com/liuyisai/p/5990645.html 一.为什么 ...

  10. Petrozavodsk WinterTraining 2015

    PetrozavodskWinterTraining2015 A - Three Servers 题目描述:有\(n\)个数,将这\(n\)个数分成\(3\)堆,使得\(3\)堆中和的最大值减最小值最 ...