0Pricing
Android Academy · บทเรียน

การขอสิทธิ์ใน Compose

ใช้ API ของ Accompanist หรือผลลัพธ์กิจกรรม

การขอสิทธิ์ใน Compose เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

การขอสิทธิ์ใน Compose

ใน Jetpack Compose คุณขอสิทธิ์ขณะทำงานโดยใช้ Activity Result API ซึ่งครอบด้วย rememberLauncherForActivityResult วิธีนี้ช่วยหลีกเลี่ยงการใช้การเรียกกลับแบบเก่าอย่าง onRequestPermissionsResult

สัญญา RequestPermission

Activity Result API ใช้ สัญญา ที่กำหนดข้อมูลนำเข้าและผลลัพธ์ ActivityResultContracts.RequestPermission() รับสตริงสิทธิ์และส่งคืนผลการอนุมัติเป็น Boolean

การสร้าง Launcher

rememberLauncherForActivityResult สร้าง launcher ที่เชื่อมโยงกับองค์ประกอบ คุณส่งสัญญาและการเรียกกลับที่รับผลลัพธ์เข้าไป

val launcher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.RequestPermission()
) { isGranted ->
    if (isGranted) {
        // permission granted, use the feature
    } else {
        // permission denied
    }
}

การเริ่มคำขอ

เรียกใช้ launcher.launch พร้อมสิทธิ์ที่ต้องการ ระบบจะแสดงกล่องโต้ตอบ และการเรียกกลับของคุณจะทำงานพร้อมตัวเลือกของผู้ใช้

Button(onClick = {
    launcher.launch(Manifest.permission.CAMERA)
}) {
    Text("Enable Camera")
}

ตรวจสอบก่อนขอ

อย่าเริ่มคำขอโดยไม่ตรวจสอบ ก่อนอื่นให้ตรวจว่าสิทธิ์ได้รับอนุมัติแล้วหรือไม่ และขอสิทธิ์เฉพาะเมื่อยังไม่ได้รับอนุมัติ

val context = LocalContext.current
val alreadyGranted = ContextCompat.checkSelfPermission(
    context, Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED

ติดตามสถานะใน Compose

เก็บสถานะการอนุมัติปัจจุบันไว้ในสถานะ เพื่อให้ส่วนติดต่อผู้ใช้ตอบสนองได้ อัปเดตสถานะภายในการเรียกกลับของ launcher

var hasCamera by remember {
    mutableStateOf(
        ContextCompat.checkSelfPermission(
            context, Manifest.permission.CAMERA
        ) == PackageManager.PERMISSION_GRANTED
    )
}

val launcher = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestPermission()
) { granted -> hasCamera = granted }

การขอสิทธิ์หลายรายการ

หากต้องการขอสิทธิ์หลายรายการพร้อมกัน ให้ใช้สัญญา RequestMultiplePermissions การเรียกกลับจะได้รับแผนที่ที่จับคู่สิทธิ์กับสถานะการอนุมัติ

val multi = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestMultiplePermissions()
) { results ->
    val fineLocation = results[Manifest.permission.ACCESS_FINE_LOCATION] == true
}

multi.launch(
    arrayOf(
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION
    )
)

ควบคุมส่วนติดต่อผู้ใช้จากสถานะ

แสดงเนื้อหาที่แตกต่างกันตามสถานะการอนุมัติ: หากได้รับอนุมัติ ให้แสดงฟีเจอร์ มิฉะนั้นให้แสดงปุ่มสำหรับขอสิทธิ์ วิธีนี้ทำให้หน้าจอตอบสนองและเข้าใจได้ชัดเจน

if (hasCamera) {
    CameraPreview()
} else {
    Button(onClick = { launcher.launch(Manifest.permission.CAMERA) }) {
        Text("Grant camera access")
    }
}

ตัวเลือก Accompanist Permissions

ไลบรารี Accompanist Permissions มีตัวช่วยระดับสูง เช่น rememberPermissionState หลายทีมเลือกใช้ Activity Result API โดยตรงเพื่อหลีกเลี่ยงการเพิ่มส่วนอ้างอิง ทั้งสองวิธีใช้งานได้

อย่าขอสิทธิ์ทันทีเมื่อเปิดแอป

หลีกเลี่ยงการส่งคำขอสิทธิ์ทันทีที่หน้าจอปรากฏขึ้น ให้รอจนกว่าผู้ใช้จะแตะการกระทำที่ต้องใช้สิทธิ์นั้นอย่างชัดเจน คำขอที่เกิดขึ้นตามบริบทมีอัตราการอนุมัติสูงกว่ามาก

อย่าลืมการเปลี่ยนแปลงการกำหนดค่า

rememberLauncherForActivityResult คงอยู่ข้ามการจัดองค์ประกอบใหม่ และเฟรมเวิร์ก Activity Result จะส่งผลลัพธ์ได้อย่างถูกต้องแม้เกิดการเปลี่ยนแปลงการกำหนดค่า เช่น การหมุนหน้าจอ คุณไม่จำเป็นต้องจัดการขั้นตอนเบื้องหลังเหล่านี้เอง

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับการขอสิทธิ์

สรุปทบทวน

คุณได้ขอสิทธิ์ด้วยวิธีที่ทันสมัยดังนี้:

  • ใช้ rememberLauncherForActivityResult ร่วมกับสัญญา RequestPermission
  • ตรวจสอบก่อน จากนั้นจึงใช้ launcher.launch(permission)
  • ติดตามสถานะการอนุมัติในสถานะเพื่อควบคุมส่วนติดต่อผู้ใช้
  • ใช้ RequestMultiplePermissions เมื่อต้องขอหลายรายการพร้อมกัน

ถัดไป: การจัดการการปฏิเสธและการแสดงคำอธิบายเหตุผล

คำถามที่พบบ่อย

บทเรียน “การขอสิทธิ์ใน Compose” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การขอสิทธิ์ใน Compose” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การขอสิทธิ์ใน Compose”

ใช้ API ของ Accompanist หรือผลลัพธ์กิจกรรม คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การขอสิทธิ์ใน Compose” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม

ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. รูปแบบสิทธิ์ของ Android
  2. การขอสิทธิ์ใน Compose
  3. การจัดการการปฏิเสธและเหตุผล
  4. แนวทางปฏิบัติที่ดีที่สุดด้านความเป็นส่วนตัว
← กลับไปที่ Android Academy