Android运行时权限


引言

如今许多Android应用程序会在运行时请求使用特定功能的权限。例如,使用设备摄像头的应用程序会在运行时请求摄像头权限,用户可以授予或拒绝该权限。本文将介绍如何在Android应用程序中添加运行时权限。

实现

我们将创建一个简单的应用程序,其中包含一个用于显示应用程序标题的TextView和一个用于请求权限的按钮。此应用程序将请求读取Android设备中短信的权限。

步骤1:在Android Studio中创建一个新项目

按照以下屏幕截图所示操作Android Studio。在以下屏幕中,单击“新建项目”以创建一个新的Android Studio项目。

单击“新建项目”后,您将看到以下屏幕。

在此屏幕中,只需选择“Empty Activity”并单击“Next”。单击“Next”后,您将看到以下屏幕。

在此屏幕中,只需指定项目名称。然后包名将自动生成。

注意 - 确保将语言选择为Java。

指定所有详细信息后,单击“Finish”以创建一个新的Android Studio项目。

项目创建完成后,我们将看到打开的两个文件,即activity_main.xml和MainActivity.java文件。

步骤2:使用activity_main.xml

导航到activity_main.xml。如果此文件不可见,则打开此文件。在左侧窗格中导航到app>res>layout>activity_main.xml以打开此文件。打开此文件后,将以下代码添加到其中。代码中添加了注释以详细了解。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

   <!-- creating a text view on below line-->
   <TextView
       android:id="@+id/idTVMessage"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_above="@id/idBtnRequestPermissions"
       android:layout_margin="20dp"
       android:padding="4dp"
       android:text="Android Runtime Permissions"
       android:textAlignment="center"
       android:textColor="@color/black"
       android:textSize="23sp"
       android:textStyle="bold" />
   <!-- creating a button for displaying a short message -->
   <Button
       android:id="@+id/idBtnRequestPermissions"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_centerInParent="true"
       android:layout_marginStart="10dp"
       android:layout_marginTop="10dp"
       android:layout_marginEnd="10dp"
       android:layout_marginBottom="10dp"
       android:text="Request SMS Permissions"
       android:textAllCaps="false" />
</RelativeLayout>

说明:在上面的代码中,我们创建一个根布局作为相对布局。在此布局中,我们创建一个TextView,用于显示应用程序的标题。然后,我们创建一个按钮,我们将使用它来请求在移动设备上读取短信的权限。

步骤3:在AndroidManifest.xml文件中添加权限

导航到app>AndroidManifest.xml文件,并在manifest标签中添加以下权限以读取短信。

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

步骤4:使用MainActivity.java文件

导航到MainActivity.java。如果此文件不可见,则打开此文件。在左侧窗格中导航到app>res>layout>MainActivity.java以打开此文件。打开此文件后,将以下代码添加到其中。代码中添加了注释以详细了解。

package com.example.java_test_application;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class MainActivity extends AppCompatActivity {
   // creating variables on below line for button.
   private Button permissionsBtn;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       // initializing variables on below line.
       permissionsBtn = findViewById(R.id.idBtnRequestPermissions);
       // on below line adding click listener for short message button.
       permissionsBtn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               // on below line we are checking the self permissions for reading sms.
               if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_SMS) == PackageManager.PERMISSION_DENIED) {
                   // if permission is not granted then we are requesting for the permissions on below line.
                   ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_SMS}, 100);
               } else {
                   // if permission is already granted then we are displaying a toast message as permission granted.
                   Toast.makeText(MainActivity.this, "Permission already granted", Toast.LENGTH_SHORT).show();
               }
           }
       });
   }

   @Override
   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
       super.onRequestPermissionsResult(requestCode, permissions, grantResults);
       // on below line we are checking for the request code.
       if (requestCode == 100) {
           // on below line we are checking if permissions are granted.
           if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
               // displaying a toast message when permission is granted.
               Toast.makeText(MainActivity.this, "Read SMS Permission Granted", Toast.LENGTH_SHORT).show();
           } else {
               // displaying a toast message when permission is denied.
               Toast.makeText(MainActivity.this, "Read SMS Permission Denied", Toast.LENGTH_SHORT).show();
           }
       }
   }
}

说明:在上面的代码中,我们首先为按钮创建变量。现在我们将看到onCreate方法。这是每个Android应用程序的默认方法。当创建应用程序视图时,将调用此方法。在此方法中,我们设置内容视图,即名为activity_main.xml的布局文件,以设置该文件中的UI。在onCreate方法中,我们使用在activity_main.xml文件中指定的ID初始化按钮变量。之后,我们为两个按钮添加一个OnClickListener。在OnClickListener中,我们首先检查权限是否已授予。如果已授予权限,则我们显示一条名为“权限已授予”的吐司消息。如果未授予权限,则我们请求读取短信的权限。现在我们创建另一个名为onPermissionResult的方法,此方法用于检查用户是否授予或拒绝权限。

添加上述代码后,我们只需单击顶部的绿色图标即可在移动设备上运行我们的应用程序。

注意 - 确保您已连接到您的真实设备或模拟器。

输出


结论

在本文中,我们介绍了如何在Android应用程序中添加运行时权限。

更新于:2023年5月8日

3000+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告