การใช้แผนข้อมูลเครือข่ายมือถือตลอดอายุการใช้งานสมาร์ทโฟนนั้นสามารถทำได้ง่ายๆ มีราคาสูงกว่าราคาของอุปกรณ์ ใน Android 7.0 (API ระดับ 24) และ สูงขึ้น ผู้ใช้จึงเปิดใช้การประหยัดอินเทอร์เน็ตได้ในอุปกรณ์ทั้งเครื่องเพื่อ เพิ่มประสิทธิภาพปริมาณการใช้อินเทอร์เน็ตของอุปกรณ์และลดปริมาณการใช้อินเทอร์เน็ต ความสามารถนี้ มีประโยชน์อย่างยิ่งเมื่อโรมมิ่งเมื่อใกล้สิ้นสุดรอบการเรียกเก็บเงิน หรือสำหรับแพ็กเกจอินเทอร์เน็ตแบบชำระเงินล่วงหน้าขนาดเล็ก
เมื่อผู้ใช้เปิดใช้โปรแกรมประหยัดอินเทอร์เน็ตในการตั้งค่าและอุปกรณ์ บนเครือข่ายแบบจำกัดปริมาณ ระบบจะบล็อกการใช้อินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังและสัญญาณ ให้ใช้อินเทอร์เน็ตน้อยลงในเบื้องหน้าเมื่อเป็นไปได้ ผู้ใช้สามารถ ทำให้บางแอปสามารถใช้ปริมาณอินเทอร์เน็ตที่วัดเมื่ออยู่เบื้องหลัง แม้ว่าการใช้อินเทอร์เน็ต โหมดประหยัดเปิดอยู่
Android 7.0 (API ระดับ 24) ได้ขยาย
ConnectivityManager
API เพื่อให้แอปมีวิธีเรียกข้อมูลของผู้ใช้
ค่ากำหนดโหมดประหยัดและค่ากำหนดการตรวจสอบ
การเปลี่ยนแปลง วิธีนี้ถือเป็นแนวทางปฏิบัติที่ดีสำหรับแอปในการตรวจสอบว่า
ผู้ใช้ได้เปิดใช้การประหยัดอินเทอร์เน็ตและพยายามจำกัดการทำงานเบื้องหน้าและ
อินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลัง
ตรวจสอบค่ากำหนดการประหยัดอินเทอร์เน็ต
ใน Android 7.0 (API ระดับ 24) ขึ้นไป แอปสามารถใช้
API ของ ConnectivityManager
เพื่อกำหนดข้อจำกัดการใช้ข้อมูลที่กำลังจะมีผล
getRestrictBackgroundStatus()
จะแสดงผลค่าใดค่าหนึ่งต่อไปนี้
-
RESTRICT_BACKGROUND_STATUS_DISABLED
- การประหยัดอินเทอร์เน็ตปิดอยู่
-
RESTRICT_BACKGROUND_STATUS_ENABLED
- ผู้ใช้ได้เปิดใช้การประหยัดอินเทอร์เน็ตสำหรับแอปนี้ แอปควรพยายามจำกัดข้อมูล ในเบื้องหน้าและจัดการกับข้อจำกัดเกี่ยวกับพื้นหลังได้อย่างสวยงาม ปริมาณการใช้อินเทอร์เน็ต
-
RESTRICT_BACKGROUND_STATUS_WHITELISTED
- ผู้ใช้เปิดใช้การประหยัดอินเทอร์เน็ต แต่แอปได้รับอนุญาตให้ข้ามได้ แอปยังคงพยายามจำกัดการใช้ข้อมูลเบื้องหน้าและเบื้องหลัง
จำกัดปริมาณการใช้อินเทอร์เน็ตเมื่ออุปกรณ์เชื่อมต่อกับเครือข่ายแบบจำกัดปริมาณ แม้ว่าการประหยัดอินเทอร์เน็ตจะ
หรือแอปจะได้รับอนุญาตให้ข้าม โค้ดตัวอย่างต่อไปนี้ใช้
ConnectivityManager.isActiveNetworkMetered()
และConnectivityManager.getRestrictBackgroundStatus()
เพื่อกำหนดปริมาณข้อมูลที่
แอปควรใช้
Kotlin
(getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply { // Checks if the device is on a metered network if (isActiveNetworkMetered) { // Checks user’s Data Saver settings. when (restrictBackgroundStatus) { RESTRICT_BACKGROUND_STATUS_ENABLED -> { // Background data usage is blocked for this app. Wherever possible, // the app should also use less data in the foreground. } RESTRICT_BACKGROUND_STATUS_WHITELISTED -> { // The app is allowed to bypass Data Saver. Nevertheless, wherever possible, // the app should use less data in the foreground and background. } RESTRICT_BACKGROUND_STATUS_DISABLED -> { // Data Saver is disabled. Since the device is connected to a // metered network, the app should use less data wherever possible. } } } else { // The device is not on a metered network. // Use data as required to perform syncs, downloads, and updates. } }
Java
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // Checks if the device is on a metered network if (connMgr.isActiveNetworkMetered()) { // Checks user’s Data Saver settings. switch (connMgr.getRestrictBackgroundStatus()) { case RESTRICT_BACKGROUND_STATUS_ENABLED: // Background data usage is blocked for this app. Wherever possible, // the app should also use less data in the foreground. case RESTRICT_BACKGROUND_STATUS_WHITELISTED: // The app is allowed to bypass Data Saver. Nevertheless, wherever possible, // the app should use less data in the foreground and background. case RESTRICT_BACKGROUND_STATUS_DISABLED: // Data Saver is disabled. Since the device is connected to a // metered network, the app should use less data wherever possible. } } else { // The device is not on a metered network. // Use data as required to perform syncs, downloads, and updates. }
หมายเหตุ: ลักษณะการทำงานนี้จะแตกต่างออกไปใน Android TV แทนที่จะเป็น
ที่บล็อกการใช้งานในเบื้องหลัง Android TV จะจำกัดการทำงานแค่นั้น เมื่ออยู่ใน
สำหรับเบื้องหน้า แอปพลิเคชันจะจำกัดอยู่ที่ 800 Kbps และเมื่อทำงานในเบื้องหลัง
จำกัดแอปพลิเคชันไว้ที่ 10 Kbps ใช้
ConnectivityManager.isActiveNetworkMetered()
เพื่อดูว่าควรเมื่อใด
จำกัดปริมาณการใช้อินเทอร์เน็ตบนทีวี
ขอสิทธิ์การจำกัดข้อมูล
หากแอปจำเป็นต้องใช้อินเทอร์เน็ตในเบื้องหลัง แอปก็ขอข้อมูลได้
สิทธิ์การจำกัดโดยการส่ง
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
Intent ที่มี URI ของชื่อแพ็กเกจของแอป ตัวอย่างเช่น
package:MY_APP_ID
การส่ง Intent และ URI จะเป็นการเปิดแอปการตั้งค่า และ แสดงการตั้งค่าปริมาณการใช้อินเทอร์เน็ตสำหรับแอปของคุณ จากนั้นผู้ใช้ก็จะตัดสินใจได้ว่า เพื่อเปิดใช้ข้อมูลแบ็กกราวด์สำหรับแอปของคุณ ก่อนที่คุณจะส่ง Intent แนวทางปฏิบัติที่ดีคือ ถามผู้ใช้ก่อนว่าต้องการเปิดตัว แอปการตั้งค่าเพื่อจุดประสงค์ในการเปิดใช้ข้อมูลแบ็กกราวด์
ตรวจสอบการเปลี่ยนแปลงของค่ากำหนดการประหยัดอินเทอร์เน็ต
แอปจะตรวจสอบการเปลี่ยนแปลงค่ากำหนดการประหยัดอินเทอร์เน็ตได้โดยการสร้าง
BroadcastReceiver
ถึง
ฟัง ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
และแบบไดนามิก
การลงทะเบียนตัวรับกับ
Context.registerReceiver()
เมื่อได้รับการออกอากาศนี้ แอปควรตรวจสอบว่าโปรแกรมประหยัดอินเทอร์เน็ตใหม่
ค่ากำหนดมีผลต่อสิทธิ์โดยการเรียกใช้
ConnectivityManager.getRestrictBackgroundStatus()
หมายเหตุ: ระบบจะส่งการประกาศนี้ไปยังแอปที่ลงทะเบียนแบบไดนามิกสำหรับ
ด้วย
Context.registerReceiver()
แอปที่ลงทะเบียนเพื่อรับการแพร่สัญญาณนี้ในไฟล์ Manifest จะไม่ได้รับการแจ้งเตือนดังกล่าว
ทดสอบด้วยคำสั่งของ Android Debug Bridge
Android Debug Bridge (ADB) ระบุคำสั่ง 2-3 รายการที่คุณใช้ทดสอบแอปในโปรแกรมประหยัดอินเทอร์เน็ตได้ คุณสามารถตรวจสอบและกำหนดค่าเครือข่าย หรือตั้งค่าเครือข่ายไร้สายเป็นแบบจำกัดปริมาณ เพื่อทดสอบแอปของคุณโดยไม่มีการวัดปริมาณอินเทอร์เน็ต เครือข่าย
-
$ adb shell dumpsys netpolicy
- สร้างรายงานที่รวมเครือข่ายพื้นหลังทั่วโลกในปัจจุบัน การตั้งค่าการจำกัด, UID แพ็กเกจที่ได้รับอนุญาตให้ข้ามโปรแกรมประหยัดอินเทอร์เน็ตในปัจจุบัน และ สิทธิ์เครือข่ายของแพ็กเกจอื่นๆ ที่รู้จัก
-
$ adb shell cmd netpolicy
- แสดงรายการคำสั่ง Network Policy Manager (netpolicy) ทั้งหมด
-
$ adb shell cmd netpolicy set restrict-background <boolean>
-
เปิดหรือปิดใช้โหมดประหยัดอินเทอร์เน็ตเมื่อส่ง
true
หรือfalse
ตามลำดับ -
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
-
เพิ่ม UID แพ็กเกจที่ระบุลงในรายการที่อนุญาต (
whitelist
) เพื่ออนุญาตในเบื้องหลัง ปริมาณการใช้อินเทอร์เน็ตแบบจำกัดปริมาณ -
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
-
นำ UID แพ็กเกจที่ระบุออกจากรายการที่อนุญาต (
whitelist
) เพื่อบล็อก ปริมาณการใช้อินเทอร์เน็ตที่มีการวัดปริมาณเบื้องหลังขณะเปิดใช้การประหยัดอินเทอร์เน็ต -
$ adb shell cmd netpolicy list wifi-networks
- แสดงเครือข่าย Wi-Fi ทั้งหมด โดยแสดงว่าเครือข่ายนั้นมีการวัดปริมาณอินเทอร์เน็ตหรือไม่
-
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
- ตั้งค่า Wi-Fi โดยมี SSID ที่ระบุเป็น "มีการวัดปริมาณอินเทอร์เน็ต" ซึ่งจะช่วยให้คุณจำลอง เครือข่ายแบบจำกัดปริมาณบนเครือข่ายที่ไม่จำกัดปริมาณอินเทอร์เน็ต