ขอสิทธิ์เข้าถึงตำแหน่ง

แอปที่ใช้บริการตำแหน่งต้องขอตำแหน่งเพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ สิทธิ์

เมื่อขอสิทธิ์เข้าถึงตำแหน่ง ให้ทำตามแนวทางปฏิบัติแนะนำเดียวกันกับคุณ ใช้กับสิทธิ์รันไทม์อื่นๆ หรือไม่ ความแตกต่างที่สำคัญอย่างหนึ่งเกี่ยวกับสิทธิ์เข้าถึงตำแหน่งคือ มีสิทธิ์หลายอย่างที่เกี่ยวข้องกับตำแหน่ง สิทธิ์ที่คุณ ทั้งนี้ขึ้นอยู่กับข้อกำหนดสถานที่ตั้งสำหรับ 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>

ตำแหน่งในเบื้องหลัง

แอปต้องการสิทธิ์เข้าถึงตำแหน่งในเบื้องหลังหากฟีเจอร์ภายในแอป จะแชร์ตำแหน่งกับผู้ใช้คนอื่นๆ อย่างต่อเนื่องหรือใช้การกำหนดเขตพื้นที่เสมือน 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 สิทธิ์

หากผู้ใช้ให้สิทธิ์เข้าถึงตำแหน่งโดยประมาณ แอปของคุณมีสิทธิ์เข้าถึงเฉพาะตําแหน่งโดยประมาณ ไม่ว่าตำแหน่งใดก็ตาม ที่แอปของคุณประกาศ

แอปของคุณควรจะยังใช้งานได้เมื่อผู้ใช้ระบุเฉพาะตำแหน่งโดยประมาณเท่านั้น สิทธิ์การเข้าถึง หากฟีเจอร์ในแอปจำเป็นต้องเข้าถึงตำแหน่งที่แน่นอนจริงๆ ใช้สิทธิ์ ACCESS_FINE_LOCATION คุณสามารถขอให้ผู้ใช้อนุญาต แอปเพื่อเข้าถึงตำแหน่งที่แน่นอน

ขอสิทธิ์เข้าถึงตำแหน่งขณะรันไทม์

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

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

วันที่ หลังจากที่ผู้ใช้เลือกปุ่ม &quot;แชร์ตำแหน่ง&quot; แล้ว
    กล่องโต้ตอบสิทธิ์เข้าถึงตำแหน่งของระบบจะปรากฏขึ้น
รูปที่ 1 ฟีเจอร์การแชร์ตำแหน่งที่ต้องใช้ การเข้าถึงตำแหน่งที่ทำงานอยู่เบื้องหน้า ระบบจะเปิดใช้ฟีเจอร์นี้หากผู้ใช้เลือก อนุญาตขณะใช้แอปเท่านั้น

ผู้ใช้สามารถให้เฉพาะตำแหน่งโดยประมาณเท่านั้น

ใน Android 12 (API ระดับ 31) ขึ้นไป ผู้ใช้ขอให้เรียกข้อมูลแอปได้ เฉพาะข้อมูลตำแหน่งโดยประมาณเท่านั้น แม้ว่าแอปของคุณจะขอ ACCESS_FINE_LOCATION สิทธิ์รันไทม์

หากต้องการจัดการพฤติกรรมที่อาจเป็นของผู้ใช้ โปรดอย่าขอ ACCESS_FINE_LOCATION ได้รับสิทธิ์นั้นเอง แต่ให้ขอACCESS_FINE_LOCATION และ ACCESS_COARSE_LOCATION สิทธิ์ในคำขอรันไทม์รายการเดียว หากคุณพยายามส่งคำขออย่างเดียว ACCESS_FINE_LOCATION ระบบจะไม่สนใจคำขอในรุ่นของ Android 12 หากแอปกำหนดเป้าหมายเป็น Android 12 หรือ ระบบจะบันทึกข้อความแสดงข้อผิดพลาดต่อไปนี้ไว้ใน Logcat

ACCESS_FINE_LOCATION must be requested with ACCESS_COARSE_LOCATION.

เมื่อแอปขอทั้ง ACCESS_FINE_LOCATION และ ACCESS_COARSE_LOCATION กล่องโต้ตอบสิทธิ์ของระบบจะมีตัวเลือกต่อไปนี้สำหรับผู้ใช้

  • แม่นยํา: อนุญาตให้แอปได้รับข้อมูลตำแหน่งที่แน่นอน
  • โดยประมาณ: อนุญาตให้แอปรับเฉพาะข้อมูลตำแหน่งโดยประมาณ

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

ใน Android 12 ขึ้นไป ผู้ใช้จะไปที่การตั้งค่าระบบได้ เพื่อตั้งค่าความแม่นยำของตำแหน่งที่ต้องการสำหรับแอป ไม่ว่าแอปนั้นจะ เวอร์ชัน SDK เป้าหมาย ถึงแม้จะติดตั้งแอปไว้ในอุปกรณ์ก็ตาม ใช้ Android 11 หรือต่ำกว่า จากนั้นผู้ใช้จึงอัปเกรด เป็น Android 12 ขึ้นไป

วันที่ กล่องโต้ตอบจะอ้างอิงตำแหน่งโดยประมาณเท่านั้นและ
         มี 3 ปุ่ม โดยปุ่มหนึ่งอยู่เหนือปุ่มอีกปุ่มหนึ่ง
รูปที่ 2 กล่องโต้ตอบสิทธิ์ของระบบที่ปรากฏขึ้นเมื่อ แอปของคุณขอเฉพาะ ACCESS_COARSE_LOCATION เท่านั้น
วันที่ กล่องโต้ตอบมีตัวเลือก 2 ชุด โดยชุดหนึ่งอยู่เหนือกล่องโต้ตอบ
รูปที่ 3 กล่องโต้ตอบสิทธิ์ของระบบที่ปรากฏขึ้นเมื่อ แอปของคุณร้องขอทั้ง ACCESS_FINE_LOCATION และ ACCESS_COARSE_LOCATION ในคำขอรันไทม์รายการเดียว

ตัวเลือกของผู้ใช้มีผลต่อการให้สิทธิ์

ตารางต่อไปนี้แสดงสิทธิ์ที่ระบบให้สิทธิ์แอปของคุณ ตามตัวเลือกที่ผู้ใช้เลือกในกล่องโต้ตอบรันไทม์ของสิทธิ์

แน่นอน โดยประมาณ
ขณะใช้แอป ACCESS_FINE_LOCATION และ
ACCESS_COARSE_LOCATION
ACCESS_COARSE_LOCATION
เฉพาะครั้งนี้ ACCESS_FINE_LOCATION และ
ACCESS_COARSE_LOCATION
ACCESS_COARSE_LOCATION
ปฏิเสธ ไม่มีสิทธิ์เข้าถึงตำแหน่ง ไม่มีสิทธิ์เข้าถึงตำแหน่ง

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

Kotlin

val locationPermissionRequest = registerForActivityResult(
        ActivityResultContracts.RequestMultiplePermissions()
    ) { permissions ->
        when {
            permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
                // Precise location access granted.
            }
            permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
                // Only approximate location access granted.
            } else -> {
                // No location access granted.
            }
        }
    }

// ...

// Before you perform the actual permission request, check whether your app
// already has the permissions, and whether your app needs to show a permission
// rationale dialog. For more details, see Request permissions.
locationPermissionRequest.launch(arrayOf(
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.ACCESS_COARSE_LOCATION))

Java

ActivityResultLauncher<String[]> locationPermissionRequest =
    registerForActivityResult(new ActivityResultContracts
        .RequestMultiplePermissions(), result -> {
            Boolean fineLocationGranted = result.getOrDefault(
                    Manifest.permission.ACCESS_FINE_LOCATION, false);
            Boolean coarseLocationGranted = result.getOrDefault(
                    Manifest.permission.ACCESS_COARSE_LOCATION,false);
            if (fineLocationGranted != null && fineLocationGranted) {
                // Precise location access granted.
            } else if (coarseLocationGranted != null && coarseLocationGranted) {
                // Only approximate location access granted.
            } else {
                // No location access granted.
            }
        }
    );

// ...

// Before you perform the actual permission request, check whether your app
// already has the permissions, and whether your app needs to show a permission
// rationale dialog. For more details, see Request permissions.
locationPermissionRequest.launch(new String[] {
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.ACCESS_COARSE_LOCATION
});

ขออัปเกรดเป็นตำแหน่งที่แน่นอน

คุณขอให้ผู้ใช้อัปเกรดการเข้าถึงของแอปจากตำแหน่งโดยประมาณเป็น ตำแหน่งที่แน่นอน ก่อนขอให้ผู้ใช้อัปเกรดการเข้าถึงของแอป แต่ตําแหน่งที่แน่นอน ให้พิจารณาว่า Use Case ของแอป ต้องการความแม่นยำระดับนี้ หากแอปต้องจับคู่อุปกรณ์กับสถานที่ใกล้เคียง ผ่านบลูทูธหรือ Wi-Fi ให้พิจารณาใช้อุปกรณ์ที่ใช้ร่วมกัน การจับคู่หรือบลูทูธ สิทธิ์ทั้งหมดแทนที่จะเป็น กำลังขอสิทธิ์ ACCESS_FINE_LOCATION

วิธีขอให้ผู้ใช้อัปเกรดการเข้าถึงตำแหน่งของแอปจากแบบโดยประมาณเป็น ที่ถูกต้อง ให้ดำเนินการดังนี้

  1. หากจำเป็น ให้อธิบายว่าทำไมแอปของคุณจึงต้องใช้ สิทธิ์
  2. ขอสิทธิ์ ACCESS_FINE_LOCATION และ ACCESS_COARSE_LOCATION เนื่องจากระบบได้ให้สิทธิ์แล้วกับผู้ใช้ ตำแหน่งโดยประมาณของแอป กล่องโต้ตอบของระบบจะแตกต่างกันไปในตอนนี้ ที่แสดงในรูปที่ 4 และ รูปที่ 5:
วันที่ กล่องโต้ตอบจะมีตัวเลือก &quot;เปลี่ยนเป็นแบบแม่นยำ
         location&quot; &quot;เฉพาะครั้งนี้&quot; และ &quot;ปฏิเสธ&quot;
รูปที่ 4 ผู้ใช้ก่อนหน้านี้ เลือกโดยประมาณและขณะใช้แอป (ในกล่องโต้ตอบ จากรูปที่ 3)
วันที่ กล่องโต้ตอบจะมีตัวเลือก &quot;เฉพาะครั้งนี้&quot; และ
         &quot;ปฏิเสธ&quot;
รูปที่ 5 ผู้ใช้ก่อนหน้านี้ เลือกโดยประมาณ และเฉพาะครั้งนี้ (ในกล่องโต้ตอบจาก รูปที่ 3)

ขอเฉพาะตำแหน่งเบื้องหน้าในตอนแรก

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

รูปที่ 6 แสดงตัวอย่างแอปที่ออกแบบมาเพื่อจัดการส่วนเพิ่ม คำขอ ทั้งปุ่ม "แสดงตำแหน่งปัจจุบัน" และ "แนะนำสถานที่ใกล้เคียง" ฟีเจอร์ต่างๆ จำเป็นต้องเข้าถึงตำแหน่งในเบื้องหน้า เฉพาะ "แนะนำสถานที่ใกล้เคียง" แต่ต้องมีสิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง

วันที่ ปุ่มที่เปิดใช้การเข้าถึงตำแหน่งในเบื้องหน้าคือ
    ระยะห่างครึ่งหนึ่งของหน้าจอจากปุ่มที่เปิดใช้พื้นหลัง
    สถานที่
รูปที่ 6 ทั้ง 2 ฟีเจอร์ต้องใช้การเข้าถึงตำแหน่ง แต่มีเพียง "แนะนำสถานที่ใกล้ๆ" ฟีเจอร์ต้องใช้ตำแหน่งในเบื้องหลัง สิทธิ์การเข้าถึง

กระบวนการสำหรับคำขอเพิ่มขึ้นมีดังนี้

  1. ในตอนแรก แอปของคุณควรนำผู้ใช้ไปยังฟีเจอร์ที่ต้องใช้ การเข้าถึงตำแหน่งเบื้องหน้า เช่น "แชร์ตำแหน่ง" ในรูปที่ 1 หรือ "แสดงตำแหน่งปัจจุบัน" ในรูปที่ 2

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

  2. ในภายหลัง เมื่อผู้ใช้สำรวจฟังก์ชันที่ต้องใช้ การเข้าถึงตําแหน่งในเบื้องหลัง คุณสามารถ ขอตำแหน่งในเบื้องหลัง สิทธิ์การเข้าถึง

ขอตำแหน่งในเบื้องหลังหากจำเป็น

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

เนื้อหาในกล่องโต้ตอบสิทธิ์ขึ้นอยู่กับเวอร์ชัน SDK เป้าหมาย

เมื่อฟีเจอร์ในแอปขอตำแหน่งในเบื้องหลังในอุปกรณ์ที่ทํางาน Android 10 (API ระดับ 29) กล่องโต้ตอบสิทธิ์ของระบบจะมีตัวเลือก ที่ชื่อว่าอนุญาตตลอด หากผู้ใช้เลือกตัวเลือกนี้ คุณลักษณะใน แอปของคุณจะได้รับสิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง

แต่ใน Android 11 (API ระดับ 30) ขึ้นไป กล่องโต้ตอบของระบบจะไม่ ให้เลือกอนุญาตตลอด แต่ผู้ใช้ต้องเปิดใช้พื้นหลัง ในหน้าการตั้งค่าดังที่แสดงในรูปที่ 7

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

แอปกำหนดเป้าหมายเป็น Android 11 ขึ้นไป

หากแอปยังไม่ได้รับสิทธิ์ACCESS_BACKGROUND_LOCATION และ shouldShowRequestPermissionRationale() แสดงผล true และแสดง UI ด้านการศึกษาแก่ผู้ใช้ที่มีสิ่งต่อไปนี้

  • คำอธิบายที่ชัดเจนเกี่ยวกับเหตุผลที่ฟีเจอร์ของแอปจำเป็นต้องเข้าถึงพื้นหลัง ตำแหน่งนั้น
  • ป้ายกำกับที่ผู้ใช้มองเห็นได้ของตัวเลือกการตั้งค่าซึ่งจะระบุตำแหน่งในเบื้องหลัง (เช่น อนุญาตตลอดในรูปที่ 7) คุณสามารถโทรหา getBackgroundPermissionOptionLabel() เพื่อรับป้ายกำกับนี้ ค่าที่แสดงผลของเมธอดนี้ได้รับการแปลเป็นค่าของผู้ใช้ ค่ากำหนดภาษาของอุปกรณ์
  • ตัวเลือกสำหรับผู้ใช้ในการปฏิเสธสิทธิ์ หากผู้ใช้ปฏิเสธพื้นหลัง ผู้ใช้ควรจะใช้แอปของคุณต่อไปได้
วันที่ ผู้ใช้จะแตะการแจ้งเตือนของระบบเพื่อเปลี่ยนตำแหน่งได้
  การตั้งค่าสำหรับแอป
รูปที่ 8 การแจ้งเตือนที่ช่วยเตือนผู้ใช้ว่าได้ให้สิทธิ์แล้ว การเข้าถึงตำแหน่งในเบื้องหลังของแอป

แอปกำหนดเป้าหมายเป็น Android 10 หรือต่ำกว่า

เมื่อฟีเจอร์ในแอปขอเข้าถึงตำแหน่งในเบื้องหลัง ผู้ใช้จะเห็น กล่องโต้ตอบของระบบ กล่องโต้ตอบนี้มีตัวเลือกให้นำไปยังตำแหน่งของแอป ตัวเลือกสิทธิ์ในหน้าการตั้งค่า

ตราบใดที่แอปของคุณปฏิบัติตามแนวทางปฏิบัติแนะนำในการขอตำแหน่งอยู่แล้ว คุณไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ เพื่อรองรับการทำงานลักษณะนี้

ผู้ใช้อาจส่งผลต่อความแม่นยำของตำแหน่งในเบื้องหลัง

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

การช่วยเตือนเกี่ยวกับการให้สิทธิ์ตำแหน่งในเบื้องหลัง

ใน Android 10 ขึ้นไป เมื่อฟีเจอร์ในแอปของคุณเข้าถึงตำแหน่งของอุปกรณ์ใน พื้นหลังเป็นครั้งแรกหลังจากที่ผู้ใช้ระบุตำแหน่งในเบื้องหลัง ระบบจะกำหนดเวลาส่งการแจ้งเตือนให้แก่ผู้ใช้ ช่วงเวลานี้ แจ้งเตือนผู้ใช้ว่าได้อนุญาตให้แอปเข้าถึงอุปกรณ์แล้ว ตำแหน่งอยู่ตลอดเวลา ตัวอย่างการแจ้งเตือนจะปรากฏในรูปที่ 8

ตรวจสอบข้อกำหนดสถานที่ตั้งในทรัพยากร Dependency ของ SDK ของแอป

ตรวจสอบว่าแอปของคุณใช้ SDK ที่ขึ้นอยู่กับสิทธิ์เข้าถึงตำแหน่งหรือไม่ โดยเฉพาะสิทธิ์ ACCESS_FINE_LOCATION อ่านบทความนี้ใน Medium เกี่ยวกับการทำความรู้จักลักษณะการทำงานของ SDK ทรัพยากร Dependency

แหล่งข้อมูลเพิ่มเติม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์เข้าถึงตำแหน่งใน Android โปรดดูข้อมูลต่อไปนี้ วัสดุ:

Codelab

วิดีโอ

ตัวอย่าง