แอปสามารถบันทึกวิดีโอหรือเสียงที่เล่นจากแอปอื่น เช่น
ต้องจัดการกับ
โทเค็น MediaProjection
อย่างถูกต้อง หน้านี้จะอธิบายถึงวิธีการ รวมถึงแสดงวิธีปิดใช้ที่ผู้ดูแลระบบอุปกรณ์ได้
ความสามารถในการบันทึกภาพหน้าจอ และวิธีที่แอปเสียงจะป้องกัน
กับแอปอื่นๆ ไม่ให้บันทึกเนื้อหาที่เล่น
วิธีจัดการโทเค็น MediaProjection
MediaProjection
API
อนุญาตให้แอปรับโทเค็น MediaProjection
ที่ให้สิทธิ์เข้าถึงแบบครั้งเดียว
เพื่อบันทึกเนื้อหาบนหน้าจอหรือเสียง ระบบปฏิบัติการ Android จะถามผู้ใช้เกี่ยวกับ
ก่อนให้สิทธิ์โทเค็นกับแอปของคุณ
ระบบปฏิบัติการจะแสดงโทเค็น MediaProjection
ที่ใช้งานอยู่ใน UI การตั้งค่าด่วน และ
ทำให้ผู้ใช้ถอนสิทธิ์การเข้าถึงโทเค็นได้ทุกเมื่อ เมื่อเกิดกรณีนี้ขึ้น
จอแสดงผลเสมือนหรือสตรีมเสียงที่เชื่อมโยงกับเซสชันจะหยุดรับ
สตรีมสื่อ แอปของคุณต้องตอบสนองอย่างเหมาะสม ไม่เช่นนั้นจะดําเนินการต่อ
เพื่อบันทึกการปิดเสียง
หรือสตรีมวิดีโอสีดำ
ลงทะเบียนการติดต่อกลับใน MediaProjection
เพื่อจัดการกับการสูญเสียโทเค็น
โดยใช้เมธอด
registerCallback
และหยุดบันทึกเมื่อ
onStop
เมธอด
สำหรับข้อมูลเพิ่มเติม โปรดดูการฉายภาพสื่อ
จับภาพวิดีโอ
โปรดดู แอปตัวอย่างจับภาพหน้าจอ เพื่อเรียนรู้วิธีใช้ Media Projection API เพื่อจับภาพ หน้าจอแบบเรียลไทม์และแสดงบน SurfaceView
คุณสามารถใช้DevicePolicyManager
เพื่อป้องกันการบันทึกหน้าจอ สำหรับบัญชีองค์กร (Android for Work)
ผู้ดูแลระบบสามารถปิดใช้การรวบรวมข้อมูล Assistant สำหรับโปรไฟล์งาน
โดยใช้เมธอด
setScreenCaptureDisabled
Codelab การจัดการอุปกรณ์ Android โดยไม่ใช้แอป แสดงวิธีห้ามไม่ให้จับภาพหน้าจอ
บันทึกการเล่นเสียง
AudioPlayCapture API เปิดตัวใน Android 10 API นี้ ทำให้แอปสามารถคัดลอกเสียงที่แอปอื่นเล่นอยู่ได้ ช่วงเวลานี้ ฟีเจอร์นี้คล้ายกับการจับภาพหน้าจอ แต่สำหรับเสียง กรณีการใช้งานหลักคือ สำหรับแอปสตรีมมิงที่ต้องการบันทึกเสียงที่เกมเล่น
โปรดทราบว่า AudioPlaybackCapture API ไม่ส่งผลต่อเวลาในการตอบสนองของแอปที่มีเสียง และถูกจับภาพไว้
การสร้างแอปจับภาพ
การบันทึกการเล่นกำหนดข้อจำกัดบางประการเพื่อความปลอดภัยและความเป็นส่วนตัว แอปต้องเป็นไปตามข้อกำหนดต่อไปนี้จึงจะบันทึกเสียงได้
- แอปต้องมีส่วนเสริม
RECORD_AUDIO
สิทธิ์ - แอปพลิเคชันต้องเปิดข้อความแจ้งที่แสดงโดย
MediaProjectionManager.createScreenCaptureIntent()
และผู้ใช้ต้องอนุมัติ - แอปจับภาพและการเล่นต้องอยู่ในโปรไฟล์ผู้ใช้เดียวกัน
หากต้องการบันทึกเสียงจากแอปอื่น แอปของคุณต้องสร้าง
ออบเจ็กต์ AudioRecord
รายการ
และเพิ่ม
AudioPlaybackCaptureConfiguration
กับโมเดลนั้น โปรดทำตามขั้นตอนต่อไปนี้
- โทร
AudioPlaybackCaptureConfiguration.Builder.build()
เพื่อสร้างAudioPlaybackCaptureConfiguration
- ส่งการกำหนดค่าไปยัง
AudioRecord
โดยการเรียกใช้setAudioPlaybackCaptureConfig
การควบคุมการบันทึกเสียง
แอปของคุณควบคุมประเภทเนื้อหาที่บันทึกได้ รวมถึงเนื้อหาอื่นๆ แอปประเภทใดบ้างที่บันทึกการเล่นของตัวเองได้
การจำกัดการบันทึกตามเนื้อหาเสียง
แอปสามารถจำกัดเสียงที่บันทึกได้โดยใช้ วิธีการ:
- ผ่าน
AUDIO_USAGE
ไปที่ AudioPlaybackCaptureConfiguration.addMatchingUsage() เพื่ออนุญาตการบันทึกการใช้งานที่เฉพาะเจาะจง เรียกใช้เมธอดนี้หลายครั้งเพื่อระบุการใช้งานมากกว่า 1 รายการ - ส่ง
AUDIO_USAGE
ไปยัง AudioPlaybackCaptureConfiguration.excludeUsage() เพื่อ ห้ามบันทึกการใช้งานนั้น เรียกใช้เมธอดนี้หลายครั้งเพื่อระบุการใช้งานมากกว่า 1 รายการ - ส่ง UID ไปยัง AudioPlaybackCaptureConfiguration.addMatchingUid() เพื่อบันทึกเฉพาะแอปที่มี UID ที่เจาะจง เรียกใช้เมธอดหลายครั้งเพื่อระบุ UID มากกว่า 1 รายการ
- ส่ง UID ไปยัง AudioPlaybackCaptureConfiguration.excludeUid() เพื่อห้ามการบันทึก UID นั้น เรียกใช้เมธอดหลายครั้งเพื่อระบุ UID มากกว่า 1 รายการ
โปรดทราบว่าคุณไม่สามารถใช้เมธอด addMatchingUsage()
และ excludeUsage()
โดยจะต้องเลือกอย่างใดอย่างหนึ่ง ในทำนองเดียวกัน คุณใช้ addMatchingUid()
และ excludeUid()
ไม่ได้
ไปพร้อมๆ กัน
การจำกัดการจับภาพโดยแอปอื่นๆ
คุณสามารถกำหนดค่าแอปเพื่อป้องกันไม่ให้แอปอื่นๆ บันทึกเสียงได้ คุณจะจับเสียงที่มาจากแอปได้ก็ต่อเมื่อแอปมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้เท่านั้น
การใช้งาน
เครื่องเล่นที่ผลิตเสียงต้องตั้งค่าการใช้งาน
ถึง USAGE_MEDIA
USAGE_GAME
หรือ
USAGE_UNKNOWN
นโยบายการจับภาพ
นโยบายการบันทึกของโปรแกรมเล่นจะต้อง
AudioAttributes.ALLOW_CAPTURE_BY_ALL
ซึ่งช่วยให้แอปอื่นๆ จับภาพการเล่นได้ การดำเนินการดังกล่าวทำได้หลายวิธี ดังนี้
- หากต้องการเปิดใช้การจับภาพบนโปรแกรมเล่นทั้งหมด ให้ใส่
android:allowAudioPlaybackCapture="true"
ในmanifest.xml
- คุณยังเปิดใช้การจับภาพบนโปรแกรมเล่นทั้งหมดได้โดยเรียกใช้
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
- คุณจะตั้งค่านโยบายในโปรแกรมเล่นวิดีโอแต่ละเครื่องได้เมื่อคุณสร้างโปรแกรมเล่นดังกล่าวโดยใช้
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
(หากคุณใช้การโทรผ่านAAudio
AAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
)
หากมีคุณสมบัติตรงตามข้อกำหนดเบื้องต้นเหล่านี้ ระบบก็ตรวจจับเสียงที่โปรแกรมเล่นสร้างขึ้นได้
กำลังปิดใช้การจับภาพของระบบ
การป้องกันที่อนุญาตการบันทึกตามที่อธิบายไว้ข้างต้นมีผลกับแอปเท่านั้น Android
คอมโพเนนต์ต่างๆ ของระบบสามารถบันทึกการเล่นได้โดยค่าเริ่มต้น
คอมโพเนนต์จำนวนมากเหล่านี้ได้รับการปรับแต่งโดยผู้ให้บริการ Android และฟีเจอร์การสนับสนุนต่างๆ
เช่น การช่วยเหลือพิเศษและคำบรรยาย ด้วยเหตุนี้ เราจึงแนะนำให้แอปต่างๆ
เพื่อให้ระบบบันทึกการเล่น ในกรณีที่ไม่ค่อยเกิดขึ้นเมื่อคุณ
ต้องการให้ระบบบันทึกการเล่นของแอป ให้กำหนดนโยบายการบันทึกเป็น
ALLOW_CAPTURE_BY_NONE
การตั้งค่านโยบายขณะรันไทม์
คุณโทรหา AudioManager.setAllowedCapturePolicy()
เพื่อเปลี่ยนการบันทึกได้
ขณะที่แอปกำลังทำงาน หากมีการเล่น MediaPlayer หรือ AudioTrack
เมื่อคุณเรียกใช้เมธอด เสียงจะไม่ได้รับผลกระทบ คุณต้องปิดและเปิดใหม่อีกครั้ง
โปรแกรมเล่นหรือการติดตามเพื่อให้การเปลี่ยนแปลงนโยบายมีผลบังคับใช้
นโยบาย = Manifest + AudioManager + AudioAttributes
เนื่องจากนโยบายการบันทึกสามารถระบุได้ในหลายที่ จึงเป็นสิ่งสำคัญ
เพื่อทำความเข้าใจว่านโยบายมีผลบังคับใช้อย่างไร
ระบบจะใช้นโยบายการจับภาพที่เข้มงวดที่สุดเสมอ ตัวอย่างเช่น แอปที่มี
ไฟล์ Manifest รวมถึง setAllowedCapturePolicy="false"
จะไม่อนุญาตสิ่งที่ไม่ใช่ระบบ
แอปเพื่อบันทึกเสียง แม้ว่าจะตั้งค่า AudioManager#setAllowedCapturePolicy
ไว้
ไปยัง ALLOW_CAPTURE_BY_ALL
ในทำนองเดียวกัน หาก
ตั้งค่า AudioManager#setAllowedCapturePolicy
เป็น ALLOW_CAPTURE_BY_ALL
และ
ไฟล์ Manifest ได้ตั้งค่า setAllowedCapturePolicy="true"
แต่ไฟล์ของมีเดียเพลเยอร์
AudioAttributes
สร้างด้วย
จากนั้นจ่าย AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
มีเดียเพลเยอร์นี้จะไม่สามารถตรวจจับโดยแอปที่ไม่ใช่ระบบ
ตารางด้านล่างจะสรุปผลกระทบของแอตทริบิวต์ไฟล์ Manifest และ นโยบายที่มีผลบังคับใช้:
อนุญาตให้เล่นเสียงบันทึก | ALLOW_CAPTURE_BY_ทั้งหมด | ALLOW_CAPTURE_BY_ระบบ | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
จริง | แอปใดก็ได้ | ระบบเท่านั้น | ไม่มีการจับภาพ |
เท็จ | ระบบเท่านั้น | ระบบเท่านั้น | ไม่มีการจับภาพ |