zoukankan      html  css  js  c++  java
  • Android动态获取权限

    android权限的变化

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

    Google的解决办法:

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

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

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

                    注意:

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

             不管是 Normal 还是 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 }
  • 相关阅读:
    心跳机制
    C++虚继承和虚基类
    STL,ATL与WTL
    C# Task的暂停与终止
    C#继承
    C#线程同步问题
    CourtAi发布配置文件修改说明
    阿里云虚拟主机https化步骤第一篇,申请证书(笔记)
    linux 服务器重启指令
    .net core 发布到iis问题 HTTP Error 500.30
  • 原文地址:https://www.cnblogs.com/slyfox/p/6814978.html
Copyright © 2011-2022 走看看