Android动态获取权限

Posted 鲁迅认识的那只猹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 
22     int REQUEST_CALL_PHONE_PERMISSION=0;
23     Intent intent;
24     EditText txtNumber;
25     @Override
26     protected void onCreate(Bundle savedInstanceState) {
27         super.onCreate(savedInstanceState);
28         setContentView(R.layout.activity_main);
29 
30         Button btnCall =(Button) findViewById(R.id.btnCall);
31          txtNumber =(EditText)findViewById(R.id.txtNumber);
32 
33         btnCall.setOnClickListener(new View.OnClickListener() {
34             @Override
35             public void onClick(View v) {
36                 //如果有权限直接执行
37                 if(ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.CALL_PHONE)==PackageManager.PERMISSION_GRANTED){
38                     intent = new Intent();
39                     //添加打电话的动作
40                     intent.setAction(Intent.ACTION_CALL);
41                     //添加数据
42                     String number = txtNumber.getText().toString().trim();
43                     intent.setData(Uri.parse("tel:"+number));
44                     startActivity(intent);
45                 }
46                 //如果没有权限那么申请权限
47                 else{
48                     ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.CALL_PHONE},REQUEST_CALL_PHONE_PERMISSION);
49                 }
50             }
51         });
52     }
53 
54     /*
55     * 当请求获取权限后会执行此回调方法,来执行自己的业务逻辑
56     * */
57     @Override
58     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
59         if(requestCode==this.REQUEST_CALL_PHONE_PERMISSION){
60 
61             if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
62                 //执行自己的业务逻辑
63                 startActivity(intent);
64             }else{
65                 Toast.makeText(this, "拒绝了权限", Toast.LENGTH_SHORT).show();
66             }
67         }
68         super.onRequestPermissionsResult(requestCode,permissions,grantResults);
69     }
70 }

 


以上是关于Android动态获取权限的主要内容,如果未能解决你的问题,请参考以下文章

获取片段动态附加到 <FrameLayout>?

获取片段动态附加到 <FrameLayout>?

android动态申请权限步骤

android 6.0之后动态获取权限

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

Android动态获取权限