Android运行时权限:拨打电话权限实战教程

0 下载量 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`权限来实现拨打电话功能。开发者需遵循这种动态权限管理方式,确保在尊重用户隐私的前提下提供所需的功能。