Android运行时权限:拨打电话权限实战教程
4 浏览量
更新于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`权限来实现拨打电话功能。开发者需遵循这种动态权限管理方式,确保在尊重用户隐私的前提下提供所需的功能。
3609 浏览量
116 浏览量
1430 浏览量
133 浏览量
2020-08-27 上传
2013-03-07 上传
772 浏览量
2012-02-09 上传
2022-07-05 上传
weixin_38601364
- 粉丝: 6
- 资源: 949
最新资源
- zakaz
- matlab实现DCT变换和量化
- snueue:Reddit 媒体播放器
- Digital-electronics-1-2021
- pids-mobile
- madplay.rar
- 使用 MATLAB 进行 3D 有限元分析:这些是“使用 MATLAB 进行 3D 有限元分析”网络研讨会中使用的 MATLAB 示例-matlab开发
- LOGA 5X 多语言多平台建站系统 v5.3.0 utf-8
- band-together
- 广州大学操作系统课程设计:优先级调度.zip
- zave7.github.io:主
- Python
- Yzncms内容管理系统 v1.0.0
- -deprecated-cmsimple:[已弃用] 使用机车 cms 或类似的 http
- 串口数据保存至TXT文件.rar
- threejs-camera-dolly:用于Threejs的相机多莉助手