หน้านี้จะกล่าวถึงหัวข้อต่อไปนี้
- วิธีขอสิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง
- วิธีจัดการคำขอตามเวอร์ชัน SDK เป้าหมายของแอป
- ค่ากำหนดของผู้ใช้สำหรับตำแหน่งโดยประมาณส่งผลต่อวิธีที่แอปได้รับตำแหน่งในเบื้องหลังอย่างไร
เนื้อหาของกล่องโต้ตอบสิทธิ์จะขึ้นอยู่กับเวอร์ชัน SDK เป้าหมาย
เมื่อฟีเจอร์ในแอปขอสิทธิ์เข้าถึงตำแหน่งในเบื้องหลังในอุปกรณ์ที่ใช้ Android 10 (ระดับ API 29) กล่องโต้ตอบสิทธิ์ของระบบจะมีตัวเลือกชื่ออนุญาตตลอด หากผู้ใช้เลือกตัวเลือกนี้ ฟีเจอร์ในแอปจะได้รับสิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง
อย่างไรก็ตาม ใน Android 11 (API ระดับ 30) ขึ้นไป กล่องโต้ตอบของระบบจะไม่มีตัวเลือกอนุญาตตลอด แต่ผู้ใช้ต้องเปิดใช้ตำแหน่งในเบื้องหลังในหน้าการตั้งค่าตามที่แสดงในรูปที่ 7
คุณสามารถช่วยให้ผู้ใช้ไปยังหน้าการตั้งค่านี้ได้โดยทำตามแนวทางปฏิบัติแนะนำเมื่อขอสิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง กระบวนการให้สิทธิ์จะขึ้นอยู่กับเวอร์ชัน SDK เป้าหมายของแอป
แอปกำหนดเป้าหมายเป็น Android 11 ขึ้นไป
หากแอปยังไม่ได้รับสิทธิ์ ACCESS_BACKGROUND_LOCATION และ
shouldShowRequestPermissionRationale() แสดงผลเป็น true ให้แสดง
UI ที่ให้ข้อมูลแก่ผู้ใช้ซึ่งมีข้อมูลต่อไปนี้
- คำอธิบายที่ชัดเจนว่าทำไมฟีเจอร์ของแอปจึงต้องเข้าถึงตำแหน่งในเบื้องหลัง
- ป้ายกำกับที่ผู้ใช้มองเห็นของตัวเลือกการตั้งค่าที่ให้สิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง (เช่น อนุญาตตลอด ในรูปที่ 7) คุณสามารถเรียก
getBackgroundPermissionOptionLabel()เพื่อรับป้ายกำกับนี้ ค่าที่แสดงผลของเมธอดนี้จะแปลเป็นภาษาตามค่ากำหนดภาษาของอุปกรณ์ของผู้ใช้ - ตัวเลือกให้ผู้ใช้ปฏิเสธสิทธิ์ หากผู้ใช้ปฏิเสธสิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง ผู้ใช้ควรจะยังใช้แอปของคุณต่อไปได้
แอปกำหนดเป้าหมายเป็น Android 10 ลงไป
เมื่อฟีเจอร์ในแอปขอสิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง ผู้ใช้จะเห็นกล่องโต้ตอบของระบบ กล่องโต้ตอบนี้มีตัวเลือกให้ไปยังตัวเลือกสิทธิ์เข้าถึงตำแหน่งของแอปในหน้าการตั้งค่า
ตราบใดที่แอปทำตามแนวทางปฏิบัติแนะนำสำหรับการขอสิทธิ์เข้าถึงตำแหน่งอยู่แล้ว คุณก็ไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ เพื่อรองรับลักษณะการทำงานนี้
ผู้ใช้สามารถส่งผลต่อความแม่นยำของตำแหน่งในเบื้องหลัง
หากผู้ใช้ขอตำแหน่งโดยประมาณ ตัวเลือกของผู้ใช้ในกล่องโต้ตอบสิทธิ์เข้าถึงตำแหน่งจะมีผลกับตำแหน่งในเบื้องหลังด้วย กล่าวอีกนัยหนึ่งคือ หากผู้ใช้ให้สิทธิ์ ACCESS_BACKGROUND_LOCATION แก่แอป แต่ให้สิทธิ์เข้าถึงตำแหน่งโดยประมาณในเบื้องหน้าเท่านั้น แอปของคุณก็จะมีสิทธิ์เข้าถึงตำแหน่งโดยประมาณในเบื้องหลังด้วยเช่นกัน
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์เข้าถึงตำแหน่งใน Android ได้จากสื่อต่อไปนี้
Codelab
วิดีโอ
ตัวอย่าง
- แอปตัวอย่าง เพื่อแสดงการใช้สิทธิ์เข้าถึงตำแหน่ง