IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android如何动态申请权限(打电话) -> 正文阅读

[移动开发]Android如何动态申请权限(打电话)

Android动态申请权限(打电话)

android 高版本有些权限除了在manifest文件中静态添加,还需要动态请求
具体请求方法如下(以拨打电话为例):

方法1:

这种方法是直接呼出电话

  1. 在manifest文件中添加权限
<uses-permission android:name="android.permission.CALL_PHONE"/>
  1. Java代码动态请求【xml代码就只有一个Button,所以就不列出了】
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class MoreInfoActivity extends AppCompatActivity {

    private static final String TAG = "MoreInfoActivity";
    private Button mBtnPhone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_more_info);
        initView();
        // 拨打电话按钮的监听事件
        mBtnPhone.setOnClickListener(v -> {
            request_permission();
        });
    }

    /**
     * 动态请求权限
     */
    private void request_permission() {
        /*
        ContextCompat.checkSelfPermission:检查是否已被赋予特点权限
        PackageManager.PERMISSION_GRANTED:权限检查结果,如果权限已授予给定包,则由checkPermission()返回
        */
        // 如果CALL_PHONE权限没有被赋予
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            // 请求权限
            // permissions请求的权限
            // requestCode:应用程序特定的请求代码以匹配报告给OnRequestPermissionsResultCallback#onRequestPermissionsResult(int, String[], int[])}
            // 也就是下面回调的OnRequestPermissionResult()方法
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},10010);
            Log.d(TAG, "request_permission():正在申请权限!");
        }else {
            Log.d(TAG, "request_permission():已经拥有权限!");
            callUp();
        }
    }

    /**
     * 请求权限结果的回调
     * @param requestCode   传入的请求代码
     * @param permissions   请求的权限
     * @param grantResults  相应权限授予的结果,可以是PERMISSION_GRANTED,或DENIED.从不为空
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 10010:
                // 电话权限
                // 如果权限授予结果为PERMISSION_GRANTED,那么表示权限授予成功!
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    callUp();
                    Log.d(TAG, "onRequestPermissionsResult(): 获取权限,可以拨打电话!");
                }else {
                    Log.d(TAG, "onRequestPermissionsResult(): 权限已拒绝!");
                }
                break;
        }
    }

    private void callUp() {
        Intent intent = new Intent();
        // 设置要执行的一般操作
        // action:操作名称。特定与应用程序的操作应以供应商的包名为前缀
        intent.setAction(Intent.ACTION_CALL);
        // 设置意图正在操作的数据
        // tel:是必须要添加的参数,后面拼接的字符串为电话号
        intent.setData(Uri.parse("tel:" + "10010"));
        startActivity(intent);

    }

    private void initView() {
        mBtnPhone = findViewById(R.id.btn_phone);
    }
}

方法2:

这种方法只是调用拨打电话,输入电话号,并不呼出

  1. 在manifest文件中添加权限
<uses-permission android:name="android.permission.CALL_PHONE" />
  1. java代码
直接在按钮的点击事件中添加即可
private void callUp(String phoneNumber) {
    Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:" + phoneNumber));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:40:07  更:2021-10-30 12:40:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:46:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码