การขอสิทธิ์ใน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบสิทธิ์ของ Android
- การขอสิทธิ์ใน Compose
- การจัดการการปฏิเสธและเหตุผล
- แนวทางปฏิบัติที่ดีที่สุดด้านความเป็นส่วนตัว