Android基础之权限

一、分类

  1. 普通权限
    指不会直接威胁到用户安全和隐私的权限,对于这部分权限申请,系统自动帮我们进行授权,如网络状态查看权限
  2. 危险权限
    表示那些可能会触及用户隐私或者对设备安全性造成影响的权限,如获取设备联系人,定位设备的地理位置等。这部分权限必须手动授权

二、危险权限表
在这里插入图片描述
除了危险权限以外,剩余的都是普通权限
属于这张表达的权限,就需要运行时权限处理
不在这张表的中,只需要在Manifest.xml中声明一下权限即可
每个权限属于一个权限组,只要其中一个被同意了,整个都会被同意

三、实例(打电话)
MainActivity.java

package com.example.runtimepermissiontest;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
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.Toast;

public class MainActivity extends AppCompatActivity {
    private Button makeCall;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        makeCall=(Button)findViewById(R.id.make_call);
        makeCall.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //通过ContextCompat.checkSelfPermission()函数判断是否授权
                if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    //如果没有授权则申请授权,第三个参数是请求码,只要唯一值就可以
                    ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);

                }else {
                    //授权之后则直接调用打电话函数
                    call();
                }
            }
        });
    }

    private void call(){
        try{
            Intent intent=new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:10086"));
            startActivity(intent);
        }catch (SecurityException e){
            e.printStackTrace();
        }
    }

    @Override
    //requestPermissions的结果会回调到下面的函数中,其中第三个参数就是授权结果
    public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){
        switch (requestCode){
            case 1://1”就是刚才的请求码
                if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
                    call();
                }
                else{//不同意授权的情况
                    Toast.makeText(this,"你拒绝了这个授权",Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }
}

在AndroidManifest.xml中注册

 <uses-permission android:name="android.permission.CALL_PHONE"/>

结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值