愿君学长松,慎勿作桃李。这篇文章主要讲述Android动态获取权限相关的知识,希望能为你提供帮助。
android权限的变化在Android6.0以前的版本的时候,Android的权限都是在安装的时候全部的配置完成的。然而这往往会造成一些安全的问题。
Google的解决办法:
将Android中的权限分为了两大类:
Normal:权限不会直接涉及到用户的隐私。如果你的应用在manifest清单文件中配置了此类的权限,那么系统会自动的同意。
Dangerous权限能够让应用去访问用户的隐私数据。如果你的应用在manifest中配置了此类的权限,那么久得需要用户同意此类权限。
注意:如果你的应用需要一个dangerous权限,那么在每一次执行需要这个权限的操作时,你必须检查是否有这个权限。应用用户总是可以取消这个权限的,并不能认为一次同意永久拥有。
Demo代码:
1 package com.example.it.android_callphone; 2 3 import android.content.Intent; 4 import android.content.pm.PackageManager; 5 import android.net.Uri; 6 import android.support.annotation.NonNull; 7 import android.support.v4.app.ActivityCompat; 8 import android.support.v4.content.ContextCompat; 9 import android.support.v7.app.AppCompatActivity; 10 import android.os.Bundle; 11 import android.view.View; 12 import android.widget.Button; 13 import android.widget.EditText; 14 import android.widget.Toast; 15 16 import java.net.URI; 17 import java.security.Permission; 18 import java.util.jar.Manifest; 19 20 public class MainActivity extends AppCompatActivity { 21 22int REQUEST_CALL_PHONE_PERMISSION=0; 23Intent intent; 24EditText txtNumber; 25@Override 26protected void onCreate(Bundle savedInstanceState) { 27super.onCreate(savedInstanceState); 28setContentView(R.layout.activity_main); 29 30Button btnCall =(Button) findViewById(R.id.btnCall); 31txtNumber =(EditText)findViewById(R.id.txtNumber); 32 33btnCall.setOnClickListener(new View.OnClickListener() { 34@Override 35public void onClick(View v) { 36//如果有权限直接执行 37if(ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.CALL_PHONE)==PackageManager.PERMISSION_GRANTED){ 38intent = new Intent(); 39//添加打电话的动作 40intent.setAction(Intent.ACTION_CALL); 41//添加数据 42String number = txtNumber.getText().toString().trim(); 43intent.setData(Uri.parse("tel:"+number)); 44startActivity(intent); 45} 46//如果没有权限那么申请权限 47else{ 48ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.CALL_PHONE},REQUEST_CALL_PHONE_PERMISSION); 49} 50} 51}); 52} 53 54/* 55* 当请求获取权限后会执行此回调方法,来执行自己的业务逻辑 56* */ 57@Override 58public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 59if(requestCode==this.REQUEST_CALL_PHONE_PERMISSION){ 60 61if(grantResults[0]==PackageManager.PERMISSION_GRANTED){ 62//执行自己的业务逻辑 63startActivity(intent); 64}else{ 65Toast.makeText(this, "拒绝了权限", Toast.LENGTH_SHORT).show(); 66} 67} 68super.onRequestPermissionsResult(requestCode,permissions,grantResults); 69} 70 }
【Android动态获取权限】
推荐阅读
- android 广播的插件化
- 如何在Mac上安装Homebrew(操作步骤详细指南)
- Bash函数及其使用方法(变量、参数、返回值)
- Yarn与NPM有哪些区别(综合比较)
- 13个最佳Java IDE合集以及优缺点介绍
- 如何在Windows上安装Jenkins(分步指南)
- 如何创建WordPress网站(选择域名、托管、安装、插件等)
- WordPress.org(自托管)与WordPress.com(免费版)有什么区别()
- 4个最佳免费的常用WordPress插件,适用于你的网站