แอปที่กำหนดเป้าหมายเป็น Android 12 (API ระดับ 31) ขึ้นไปจะเริ่มบริการที่ทำงานอยู่เบื้องหน้า
ไม่ได้ขณะที่แอปทำงานอยู่เบื้องหลัง ยกเว้นใน บางกรณีพิเศษ หากแอปพยายามเริ่มบริการที่ทำงานอยู่เบื้องหน้าขณะที่แอปทำงานอยู่เบื้องหลัง และบริการที่ทำงานอยู่เบื้องหน้าไม่เข้าข่ายกรณีพิเศษใดกรณีหนึ่ง ระบบจะแสดง
ForegroundServiceStartNotAllowedException
นอกจากนี้ หากแอปต้องการเปิดบริการที่ทำงานอยู่เบื้องหน้าที่ต้องใช้สิทธิ์ ขณะใช้งาน (เช่น สิทธิ์เข้าถึงเซ็นเซอร์ตรวจจับการเคลื่อนไหวของร่างกาย กล้อง ไมโครโฟน หรือตำแหน่ง) แอปจะ สร้าง บริการไม่ได้ขณะที่อยู่ในเบื้องหลัง แม้ว่าแอปจะเข้าข่ายข้อยกเว้นข้อจำกัดในการเริ่มทำงานในเบื้องหลังก็ตาม เหตุผลของข้อจำกัดนี้อธิบายไว้ในส่วน ข้อจำกัดในการ เริ่มบริการที่ทำงานอยู่เบื้องหน้าที่ต้องใช้สิทธิ์ขณะใช้งาน สิทธิ์
ข้อยกเว้นข้อจำกัดในการเริ่มทำงานในเบื้องหลัง
ในสถานการณ์ต่อไปนี้ แอปจะเริ่มบริการที่ทำงานอยู่เบื้องหน้าได้แม้ว่าแอปจะทำงานอยู่เบื้องหลังก็ตาม
- แอปเปลี่ยนจากสถานะที่ผู้ใช้มองเห็นได้ เช่น กิจกรรม
- แอปสามารถเริ่มกิจกรรมจาก เบื้องหลังได้ ยกเว้นกรณีที่ แอปมีกิจกรรมอยู่ใน Back Stack ของงานที่มีอยู่
แอปได้รับข้อความที่มีลำดับความสำคัญสูงโดยใช้ Firebase Cloud Messaging
ผู้ใช้ดำเนินการกับองค์ประกอบ UI ที่เกี่ยวข้องกับแอป เช่น โต้ตอบกับ Bubble, การแจ้งเตือน, วิดเจ็ต หรือกิจกรรม
แอปเรียกใช้การปลุกในเวลาที่แน่นอนเพื่อดำเนินการตามที่ผู้ใช้ขอ
แอปได้รับเหตุการณ์ที่เกี่ยวข้องกับ การจํากัดขอบเขตทางภูมิศาสตร์หรือการจดจำ กิจกรรมการเปลี่ยนผ่าน
หลังจากอุปกรณ์รีบูตและได้รับ Intent Action
ACTION_BOOT_COMPLETED,ACTION_LOCKED_BOOT_COMPLETED, หรือACTION_MY_PACKAGE_REPLACEDใน Broadcast Receiverแอปได้รับ การดำเนินการผ่าน Intent
ACTION_TIMEZONE_CHANGED,ACTION_TIME_CHANGED, หรือACTION_LOCALE_CHANGEDใน Broadcast Receiverแอปได้รับเหตุการณ์
ACTION_TRANSACTION_DETECTEDจากNfcServiceแอปที่มีบทบาทหรือสิทธิ์บางอย่างของระบบ เช่น เจ้าของ อุปกรณ์ และ เจ้าของ โปรไฟล์
แอปใช้ Companion Device Manager และประกาศสิทธิ์
REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUNDหรือสิทธิ์REQUEST_COMPANION_RUN_IN_BACKGROUNDให้ใช้REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUNDทุกครั้งที่ทำได้ผู้ใช้ปิดการเพิ่มประสิทธิภาพแบตเตอรี่สำหรับแอป
แอปมีสิทธิ์
SYSTEM_ALERT_WINDOWหมายเหตุ: หากแอปกำหนดเป้าหมายเป็น Android 15 ขึ้นไป แอปต้องมีสิทธิ์SYSTEM_ALERT_WINDOWและ แอปต้องมีหน้าต่างการวางซ้อนที่มองเห็นได้ในปัจจุบัน
ข้อจำกัดในการเริ่มบริการที่ทำงานอยู่เบื้องหน้าที่ต้องใช้สิทธิ์ขณะใช้งาน
ใน Android 14 (ระดับ API 34) ขึ้นไป คุณควรทราบถึงสถานการณ์พิเศษบางอย่างหากคุณเริ่มบริการที่ทำงานอยู่เบื้องหน้าที่ต้องใช้สิทธิ์ขณะใช้งาน
หากแอปกำหนดเป้าหมายเป็น Android 14 ขึ้นไป ระบบปฏิบัติการจะตรวจสอบเมื่อคุณสร้างบริการที่ทำงานอยู่เบื้องหน้าเพื่อให้แน่ใจว่าแอปมีสิทธิ์ที่เหมาะสมทั้งหมดสำหรับบริการประเภทนั้น เช่น เมื่อคุณสร้างบริการที่ทำงานอยู่เบื้องหน้าประเภท
ไมโครโฟน ระบบปฏิบัติการจะตรวจสอบว่าแอปของคุณมีสิทธิ์
RECORD_AUDIO
อยู่ในปัจจุบัน หากคุณไม่มีสิทธิ์ดังกล่าว ระบบจะแสดง
SecurityException
สำหรับสิทธิ์ขณะใช้งาน การดำเนินการนี้อาจทำให้เกิดปัญหา หากแอปมีสิทธิ์ขณะใช้งาน
แอปจะมีสิทธิ์ดังกล่าวเฉพาะขณะที่แอปอยู่ใน
เบื้องหน้า ซึ่งหมายความว่าหากแอปอยู่ในเบื้องหลังและพยายามสร้างบริการที่ทำงานอยู่เบื้องหน้าประเภทกล้อง ตำแหน่ง หรือไมโครโฟน ระบบจะเห็นว่าแอปของคุณ ไม่มี สิทธิ์ที่จำเป็นในปัจจุบัน และจะแสดง SecurityException
ในทำนองเดียวกัน หากแอปอยู่ในเบื้องหลังและสร้างบริการด้านสุขภาพที่ต้องใช้สิทธิ์ BODY_SENSORS แอปจะไม่มีสิทธิ์ดังกล่าวในปัจจุบัน และระบบจะแสดงข้อยกเว้น
(การดำเนินการนี้จะไม่มีผลหากเป็นบริการด้านสุขภาพที่ต้องใช้สิทธิ์อื่น
เช่น ACTIVITY_RECOGNITION.) การเรียก
PermissionChecker.checkSelfPermission()
จะ ไม่ ป้องกันปัญหานี้ หากแอปมีสิทธิ์ขณะใช้งานและเรียก checkSelfPermission() เพื่อตรวจสอบว่าแอปมีสิทธิ์ดังกล่าวหรือไม่ เมธอดจะแสดง PERMISSION_GRANTED แม้ว่าแอปจะอยู่ในเบื้องหลังก็ตาม เมื่อเมธอดแสดง PERMISSION_GRANTED ก็หมายความว่า "แอปของคุณมีสิทธิ์นี้ ขณะที่แอปกำลังใช้งานอยู่"
ด้วยเหตุนี้ หากบริการที่ทำงานอยู่เบื้องหน้าต้องใช้สิทธิ์ขณะใช้งาน คุณ
ต้องเรียก Context.startForegroundService() หรือ Context.bindService() ขณะที่
แอปมีกิจกรรมที่มองเห็นได้ เว้นแต่บริการจะเข้าข่ายหนึ่งใน
ข้อยกเว้นที่กำหนดไว้
ข้อยกเว้นข้อจำกัดเกี่ยวกับสิทธิ์ขณะใช้งาน
ในบางสถานการณ์ แม้ว่าบริการที่ทำงานอยู่เบื้องหน้าจะเริ่มทำงานขณะที่แอป ทำงาน อยู่เบื้องหลัง แต่บริการก็ยังเข้าถึงข้อมูลตำแหน่ง กล้อง และไมโครโฟนได้ขณะที่แอปทำงานอยู่เบื้องหน้า ("ขณะใช้งาน")
ในสถานการณ์เดียวกันนี้ หากบริการ ประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้า
เป็น location และแอปที่มี
สิทธิ์ ACCESS_BACKGROUND_LOCATION
เป็นผู้เริ่มบริการ บริการนี้จะเข้าถึงข้อมูลตำแหน่งได้ตลอดเวลา แม้ว่า
แอปจะทำงานอยู่เบื้องหลังก็ตาม
รายการต่อไปนี้แสดงสถานการณ์ดังกล่าว
- คอมโพเนนต์ของระบบเริ่มบริการ
- บริการเริ่มทำงานโดยการโต้ตอบกับวิดเจ็ต ของแอป
- บริการเริ่มทำงานโดยการโต้ตอบกับการแจ้งเตือน
- บริการเริ่มทำงานเป็น
PendingIntentที่ส่งจากแอปอื่นที่มองเห็นได้ - บริการเริ่มทำงานโดยแอปที่เป็นเครื่องมือควบคุมนโยบายด้านอุปกรณ์ซึ่งทำงานในโหมดเจ้าของอุปกรณ์
- บริการเริ่มทำงานโดยแอปที่ให้บริการ
VoiceInteractionService - บริการเริ่มทำงานโดยแอปที่มีสิทธิ์พิเศษ
START_ACTIVITIES_FROM_BACKGROUND
ระบุบริการที่ได้รับผลกระทบในแอป
เมื่อทดสอบแอป ให้เริ่มบริการที่ทำงานอยู่เบื้องหน้าของแอป หากบริการที่เริ่มทำงานมีการเข้าถึงตำแหน่ง ไมโครโฟน และกล้องแบบจำกัด ข้อความต่อไปนี้จะปรากฏใน Logcat
Foreground service started from background can not have \ location/camera/microphone access: service SERVICE_NAME