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+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.