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

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

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

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

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

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

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

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

หลังจากที่ผู้ใช้เลือกปุ่มแชร์ตำแหน่ง กล่องโต้ตอบสิทธิ์เข้าถึงตำแหน่งของระบบจะปรากฏขึ้น
รูปที่ 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
});

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

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

หากต้องการขอให้ผู้ใช้อัปเกรดการเข้าถึงตำแหน่งของแอปจากแบบใกล้เคียงเป็นแบบแม่นยำ ให้ทำดังนี้

  1. หากจำเป็น ให้อธิบายเหตุผลที่แอปของคุณต้องใช้สิทธิ์
  2. ขอสิทธิ์ ACCESS_FINE_LOCATION และ ACCESS_COARSE_LOCATION ร่วมกันอีกครั้ง เนื่องจากระบบได้อนุญาตให้ระบบมอบตำแหน่งโดยประมาณแก่แอปของคุณแล้ว กล่องโต้ตอบของระบบจึงเปลี่ยนไปในรูปที่ 4 และรูปที่ 5
กล่องโต้ตอบจะมีตัวเลือก &quot;เปลี่ยนเป็นตำแหน่งที่แน่นอน&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

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

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

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

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

Codelab

วิดีโอ

ตัวอย่าง