เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ แอปที่ใช้บริการตำแหน่งต้องขอสิทธิ์เข้าถึงตำแหน่ง
สิทธิ์หลายอย่างเกี่ยวข้องกับตำแหน่ง สิทธิ์ที่คุณขอ และวิธีขอสิทธิ์ จะขึ้นอยู่กับข้อกำหนดด้านตำแหน่งสำหรับ Use Case ของแอป
หน้านี้อธิบายข้อกำหนดด้านตำแหน่งประเภทต่างๆ และวิธีขอสิทธิ์เข้าถึงตำแหน่งในแต่ละกรณี
หากต้องการขอสิทธิ์เข้าถึงตำแหน่ง ให้ทำตามแนวทางปฏิบัติแนะนำสำหรับสิทธิ์รันไทม์ทั้งหมด
ประเภทการเข้าถึงตำแหน่ง
สิทธิ์แต่ละรายการมีลักษณะต่อไปนี้ร่วมกัน
- หมวดหมู่: ตำแหน่งในเบื้องหน้าหรือตำแหน่งในเบื้องหลัง
- ความแม่นยำ: ตำแหน่งที่แน่นอนหรือตำแหน่งโดยประมาณ
ตำแหน่งที่ทำงานอยู่เบื้องหน้า
หากแอปมีฟีเจอร์ที่แชร์หรือรับข้อมูลตำแหน่งเพียงครั้งเดียวหรือเป็นระยะเวลาที่กำหนด ฟีเจอร์นั้นจะต้องมีการเข้าถึงตำแหน่งในเบื้องหน้า ตัวอย่างเช่น
- ฟีเจอร์ในแอปนำทางช่วยให้ผู้ใช้ได้รับเส้นทางแบบเลี้ยวต่อเลี้ยว
- ฟีเจอร์ในแอปรับส่งข้อความช่วยให้ผู้ใช้แชร์ตำแหน่งปัจจุบันกับผู้ใช้รายอื่นได้
ระบบจะถือว่าแอปของคุณใช้ตำแหน่งในเบื้องหน้าหากฟีเจอร์ของ แอปเข้าถึงตำแหน่งปัจจุบันของอุปกรณ์ในสถานการณ์ใดสถานการณ์หนึ่งต่อไปนี้
- กิจกรรมที่เป็นของแอปจะปรากฏ
แอปของคุณกำลังเรียกใช้บริการที่ทำงานอยู่เบื้องหน้า เมื่อบริการที่ทำงานอยู่เบื้องหน้า ทำงานอยู่ ระบบจะเพิ่มการรับรู้ของผู้ใช้โดยแสดงการแจ้งเตือนแบบต่อเนื่อง แอปจะยังคงมีสิทธิ์เข้าถึงเมื่ออยู่ในเบื้องหลัง เช่น เมื่อผู้ใช้กดปุ่มหน้าแรกบนอุปกรณ์หรือปิดจอแสดงผลของอุปกรณ์
นอกจากนี้ คุณควรประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าของ
location
ดังที่แสดงในข้อมูลโค้ดต่อไปนี้ ใน Android 10 (API ระดับ 29) ขึ้นไป คุณต้องประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้านี้<!-- Recommended for Android 9 (API level 28) and lower. --> <!-- Required for Android 10 (API level 29) and higher. --> <service android:name="MyNavigationService" android:foregroundServiceType="location" ... > <!-- Any inner elements would go here. --> </service>
คุณประกาศความจำเป็นในการเข้าถึงตำแหน่งในเบื้องหน้าเมื่อแอปขอสิทธิ์ ACCESS_COARSE_LOCATION
หรือสิทธิ์ ACCESS_FINE_LOCATION
ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
<manifest ... >
<!-- Always include this permission -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Include only if your app benefits from precise location access. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
ตำแหน่งในเบื้องหลัง
แอปต้องมีสิทธิ์เข้าถึงตำแหน่งในเบื้องหลังหากฟีเจอร์ภายในแอป แชร์ตำแหน่งกับผู้ใช้รายอื่นอย่างต่อเนื่องหรือใช้ Geofencing API ตัวอย่างบางส่วนมีดังนี้
- ภายในแอปแชร์ตำแหน่งในครอบครัว ฟีเจอร์นี้ช่วยให้ผู้ใช้แชร์ตำแหน่งกับสมาชิกในครอบครัวได้อย่างต่อเนื่อง
- ฟีเจอร์ในแอป IoT ช่วยให้ผู้ใช้กำหนดค่าอุปกรณ์ในบ้านได้ เพื่อให้ปิดเมื่อผู้ใช้ออกจากบ้านและเปิดอีกครั้ง เมื่อผู้ใช้กลับถึงบ้าน
ระบบจะถือว่าแอปของคุณใช้ตำแหน่งในเบื้องหลังหากแอปเข้าถึงตำแหน่งปัจจุบันของอุปกรณ์ในสถานการณ์อื่นๆ นอกเหนือจากที่อธิบายไว้ในส่วนตำแหน่งในเบื้องหน้า ความแม่นยำของตำแหน่งในเบื้องหลังจะเหมือนกับความแม่นยำของตำแหน่งในเบื้องหน้า ซึ่งขึ้นอยู่กับสิทธิ์เข้าถึงตำแหน่งที่แอปประกาศ
ใน Android 10 (API ระดับ 29) ขึ้นไป คุณต้องประกาศสิทธิ์
ACCESS_BACKGROUND_LOCATION
ในไฟล์ Manifest ของแอปเพื่อ
ขอสิทธิ์เข้าถึงตำแหน่งในเบื้องหลังที่รันไทม์ ใน Android เวอร์ชันก่อนหน้า เมื่อแอปได้รับสิทธิ์เข้าถึงตำแหน่งเมื่อทำงานอยู่เบื้องหน้า แอปจะได้รับสิทธิ์เข้าถึงตำแหน่งเมื่อทำงานอยู่เบื้องหลังโดยอัตโนมัติด้วย
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
ความแม่นยำ
Android รองรับระดับความแม่นยำของตำแหน่งต่อไปนี้
- โดยประมาณ
- ระบุตำแหน่งโดยประมาณของอุปกรณ์ หากการประมาณตำแหน่งนี้มาจาก
LocationManagerService
หรือFusedLocationProvider
การประมาณนี้จะมีความแม่นยำภายในประมาณ 3 ตารางกิโลเมตร (ประมาณ 1.2 ตารางไมล์) แอปจะรับตำแหน่งที่มีความแม่นยำระดับนี้ได้เมื่อคุณ ประกาศสิทธิ์ACCESS_COARSE_LOCATION
แต่ไม่ได้ประกาศสิทธิ์ACCESS_FINE_LOCATION
- แน่นอน
- ให้ค่าประมาณตำแหน่งอุปกรณ์ที่แม่นยำที่สุดเท่าที่จะเป็นไปได้
หากการประมาณตำแหน่งมาจาก
LocationManagerService
หรือFusedLocationProvider
โดยปกติแล้วการประมาณนี้จะอยู่ภายในระยะประมาณ 50 เมตร (160 ฟุต) และบางครั้งอาจแม่นยำถึงระดับไม่กี่เมตร (10 ฟุต) หรือ ดีกว่า แอปจะรับตำแหน่งที่มีความแม่นยำระดับนี้ได้เมื่อคุณ ประกาศACCESS_FINE_LOCATION
permission
หากผู้ใช้ให้สิทธิ์เข้าถึงตำแหน่งโดยประมาณ แอปของคุณจะมีสิทธิ์เข้าถึงตำแหน่งโดยประมาณเท่านั้น ไม่ว่าแอปจะประกาศสิทธิ์เข้าถึงตำแหน่งใดก็ตาม
แอปของคุณควรยังคงทำงานได้เมื่อผู้ใช้ให้สิทธิ์เข้าถึงตำแหน่งโดยประมาณเท่านั้น
หากฟีเจอร์ในแอปของคุณจำเป็นต้องเข้าถึงตำแหน่งที่แน่นอนโดยใช้สิทธิ์ ACCESS_FINE_LOCATION
คุณสามารถขอให้ผู้ใช้อนุญาตให้
แอปเข้าถึงตำแหน่งที่แน่นอนได้
การช่วยเตือนเกี่ยวกับการให้สิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง
ใน Android 10 (API ระดับ 29) ขึ้นไป เมื่อฟีเจอร์ในแอปเข้าถึงตำแหน่งของอุปกรณ์ในเบื้องหลังเป็นครั้งแรกหลังจากที่ผู้ใช้ให้สิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง ระบบจะกำหนดเวลาการแจ้งเตือนเพื่อส่งไปยังผู้ใช้ การแจ้งเตือนนี้จะเตือนผู้ใช้ว่าได้อนุญาตให้แอปของคุณเข้าถึง ตำแหน่งของอุปกรณ์ตลอดเวลา ตัวอย่างการแจ้งเตือนจะปรากฏในรูปที่ 8
ตรวจสอบข้อกำหนดด้านตำแหน่งในการอ้างอิง SDK ของแอป
ตรวจสอบว่าแอปใช้ SDK ที่ต้องอาศัยสิทธิ์เข้าถึงตำแหน่งหรือไม่
โดยเฉพาะสิทธิ์ ACCESS_FINE_LOCATION
อ่านข้อมูลเพิ่มเติมได้ในบล็อกโพสต์ทำความรู้จัก
ลักษณะการทำงานของทรัพยากร Dependency ของ SDK บน Medium
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์เข้าถึงตำแหน่งใน Android ได้ที่สื่อต่อไปนี้
Codelabs
วิดีโอ
ตัวอย่าง
- แอปตัวอย่าง เพื่อสาธิตการใช้สิทธิ์เข้าถึงตำแหน่ง