Android运行时权限:拨打电话权限实战教程
72 浏览量
更新于2024-08-28
收藏 127KB PDF 举报
本文将详细介绍Android应用程序在运行时如何申请特定权限的实例,以拨打电话(CALL_PHONE)为例。在Android 6.0(API级别23)引入了运行时权限的概念,以前开发者可以在应用安装时获取所有权限,但随着隐私和安全意识的提升,用户现在可以手动授予或拒绝应用在特定功能执行时请求的权限。
首先,我们来看一个简单的activity_main.xml布局文件,其中包含一个按钮,用于触发拨打电话的操作。这个布局文件定义了一个`Button`组件,其`id`为"make_call",文本显示为"MakeCall":
```xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/make_call"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="MakeCall"
android:textAllCaps="false"/>
</android.support.constraint.ConstraintLayout>
```
在`MainActivity.java`文件中,`onCreate()`方法里,我们首先设置布局,并找到该按钮,然后添加了对权限请求的处理。在`onCreate()`方法的末尾,我们可以看到添加了权限请求的部分代码:
```java
Button makeCall = findViewById(R.id.make_call);
makeCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 在Android 6.0及以上版本,我们需要检查是否有CALL_PHONE权限
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
// 如果没有权限,请求权限
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CALL_PHONE},
REQUEST_CALL_PHONE_PERMISSION);
} else {
// 如果有权限,直接拨打电话
makePhoneCall();
}
}
});
```
在这里,我们使用`ContextCompat.checkSelfPermission()`方法检查是否有权限,如果没有,通过`ActivityCompat.requestPermissions()`方法向用户请求权限。`REQUEST_CALL_PHONE_PERMISSION`是自定义的一个请求码,用于在用户授权后识别这次请求。如果用户同意,`makePhoneCall()`方法会被调用以实际执行拨打电话操作。
当在Android 6.0及更高版本中运行此应用时,只有在用户授予拨打电话权限后,程序才能在运行时执行拨打电话功能。这体现了Android的权限模型变化,旨在提供更好的用户隐私保护和控制。
总结来说,本文展示了在Android 6.0及以上版本中,如何在程序运行时通过检查并请求`CALL_PHONE`权限来实现拨打电话功能。开发者需遵循这种动态权限管理方式,确保在尊重用户隐私的前提下提供所需的功能。
2014-12-04 上传
2009-04-03 上传
2021-01-21 上传
2020-08-26 上传
2020-08-27 上传
2013-03-07 上传
2020-09-05 上传
2012-02-09 上传
2022-07-05 上传
weixin_38601364
- 粉丝: 6
- 资源: 949
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析