Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีเพิ่ม Permission ใน AndroidManifest.xml

การประกาศสิทธิ์ (Permissions) ใน Android Manifest

ตัวอย่างนี้แสดงวิธีเพิ่ม <uses-permission> ใน AndroidManifest.xml เพื่อขอสิทธิ์จากผู้ใช้

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

Android Studio → File → New Project → กรอกรายละเอียด → Finish

ขั้นตอนที่ 2: Layout - res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical"
    tools:context=".MainActivity" />

ขั้นตอนที่ 3: MainActivity.java

package app.tutorialspoint.com.sample;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

ขั้นตอนที่ 4: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.tutorialspoint.com.sample">
    
    <!-- ประกาศ Permission ที่นี่ (นอก application tag) -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

ประเภท Permission ใน Android

1. Normal Permissions (อนุมัติอัตโนมัติตอนติดตั้ง)

  • INTERNET, ACCESS_NETWORK_STATE, VIBRATE, WAKE_LOCK
  • SET_ALARM, SET_TIME_ZONE, BLUETOOTH (บางตัว)

2. Dangerous Permissions (ต้องขออนุมัติจากผู้ใช้ Runtime - API 23+)

การขอ Runtime Permission (Android 6.0+)

// ตรวจสอบสิทธิ์
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) 
    != PackageManager.PERMISSION_GRANTED) {
    
    // ขอสิทธิ์
    ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.CAMERA}, 
        REQUEST_CAMERA_PERMISSION);
}

// รับผลลัพธ์
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_CAMERA_PERMISSION) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // ได้รับอนุญาต
        } else {
            // ถูกปฏิเสธ
        }
    }
}

Permission สำหรับ Features (Hardware)

<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />

หมายเหตุ

  • Normal permissions ให้เพิ่มใน Manifest ก็พอ
  • Dangerous permissions ต้องขอ Runtime เพิ่ม (API 23+)
  • Android 11+ (API 30) มีการเปลี่ยนแปลงเกี่ยวกับ Storage Permission (Scoped Storage)
  • Android 12+ (API 31) มี Bluetooth permissions ใหม่
  • ใช้ android:maxSdkVersion เพื่อจำกัดเวอร์ชันที่ต้องการ permission
GrupPermissions
CALENDARREAD_CALENDAR, WRITE_CALENDAR
CAMERACAMERA
CONTACTSREAD_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTS
LOCATIONACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION
MICROPHONERECORD_AUDIO
PHONEREAD_PHONE_STATE, CALL_PHONE, READ_CALL_LOG
SENSORSBODY_SENSORS
SMSSEND_SMS, RECEIVE_SMS, READ_SMS
STORAGEREAD_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE