Ứng dụng có thể ghi lại video hoặc âm thanh đang phát từ một ứng dụng khác. Chẳng hạn
phải xử lý
mã thông báo MediaProjection
chính xác. Trang này giải thích cách thực hiện. Hướng dẫn này cũng cho biết cách quản trị viên thiết bị có thể tắt
khả năng ghi lại mọi ảnh chụp nhanh trên màn hình cũng như cách ứng dụng âm thanh có thể ngăn chặn
các ứng dụng khác ghi lại nội dung phát.
Cách xử lý mã thông báo MediaProjection
API MediaProjection
cho phép ứng dụng thu thập mã thông báo MediaProjection
để cấp quyền truy cập một lần
để ghi lại âm thanh hoặc nội dung trên màn hình. Hệ điều hành Android yêu cầu người dùng cung cấp
trước khi cấp mã thông báo này cho ứng dụng.
Hệ điều hành hiển thị các mã thông báo MediaProjection
đang hoạt động trong giao diện người dùng trình đơn Cài đặt nhanh và
cho phép người dùng thu hồi quyền truy cập vào một mã thông báo bất cứ lúc nào. Khi điều này xảy ra,
màn hình ảo hoặc luồng âm thanh được liên kết với điểm dừng phiên
luồng nội dung nghe nhìn. Ứng dụng của bạn phải phản hồi thích hợp, nếu không ứng dụng sẽ tiếp tục
để ghi âm khoảng lặng hoặc ghi luồng video màu đen.
Để xử lý việc mất mã thông báo, hãy đăng ký một lệnh gọi lại trên MediaProjection
bằng cách sử dụng
registerCallback
và ngừng ghi khi
onStop
được gọi.
Để biết thêm thông tin, hãy xem phần Chiếu nội dung nghe nhìn.
Quay video
Xem Ứng dụng mẫu ScreenCapture để tìm hiểu cách sử dụng API Chiếu phương tiện để chụp ảnh theo thời gian thực và chiếu lên SurfaceView.
Bạn có thể sử dụng DevicePolicyManager
để ngăn ghi màn hình. Đối với tài khoản doanh nghiệp (Android for Work),
quản trị viên có thể tắt tính năng thu thập dữ liệu của trợ lý cho hồ sơ công việc
bằng cách sử dụng
setScreenCaptureDisabled
.
Lớp học lập trình Quản lý thiết bị Android mà không cần ứng dụng cho biết cách cấm chụp ảnh màn hình.
Ghi âm phát lại
Ra mắt AudioPlaybackCapture API trong Android 10. API này giúp các ứng dụng sao chép âm thanh mà các ứng dụng khác đang phát. Chiến dịch này là tính năng tương tự như chụp ảnh màn hình nhưng dành cho âm thanh. Trường hợp sử dụng chính là dành cho các ứng dụng truyền trực tuyến muốn ghi lại âm thanh mà trò chơi đang chơi.
Lưu ý rằng API AudioPlaybackCapture không ảnh hưởng đến độ trễ của ứng dụng có âm thanh đang được chụp.
Xây dựng ứng dụng chụp ảnh
Để đảm bảo tính bảo mật và quyền riêng tư, tính năng quay video phát có một số hạn chế. Để có thể ghi âm, ứng dụng phải đáp ứng các yêu cầu sau:
- Ứng dụng phải có
RECORD_AUDIO
quyền. - Ứng dụng phải hiển thị lời nhắc do
MediaProjectionManager.createScreenCaptureIntent()
! và người dùng phải phê duyệt đề xuất đó. - Các ứng dụng chụp và phát phải thuộc cùng một hồ sơ người dùng.
Để ghi âm từ một ứng dụng khác, ứng dụng của bạn phải tạo một
Đối tượng AudioRecord
và thêm một
AudioPlaybackCaptureConfiguration
vào ứng dụng. Hãy làm theo các bước sau:
- Gọi
AudioPlaybackCaptureConfiguration.Builder.build()
để tạo mộtAudioPlaybackCaptureConfiguration
. - Truyền cấu hình đến
AudioRecord
bằng cách gọisetAudioPlaybackCaptureConfig
.
Kiểm soát việc ghi âm
Ứng dụng của bạn có thể kiểm soát loại nội dung ứng dụng được phép ghi lại và những nội dung khác nhiều loại ứng dụng có thể ghi lại lần phát riêng của nó.
Hạn chế việc ghi âm theo nội dung âm thanh
Ứng dụng có thể giới hạn loại âm thanh mà ứng dụng có thể thu thập bằng cách sử dụng phương thức:
- Truyền
AUDIO_USAGE
đến AudioPlaybackCaptureConfiguration.addMatchingUsage() để cho phép nắm bắt thông tin về mục đích sử dụng cụ thể. Gọi phương thức này nhiều lần để chỉ định nhiều cách sử dụng. - Truyền
AUDIO_USAGE
đến AudioPlaybackCaptureConfiguration.filterUsage() đến cấm ghi lại hoạt động sử dụng đó. Gọi phương thức này nhiều lần để chỉ định nhiều cách sử dụng. - Chuyển một UID đến AudioPlaybackCaptureConfiguration.addMatchingUid() để chỉ chụp các ứng dụng có UID cụ thể. Gọi phương thức này nhiều lần để chỉ định nhiều UID.
- Truyền một UID đến AudioPlaybackCaptureConfiguration.ExcludeUid() để cấm chụp UID đó. Gọi phương thức này nhiều lần để chỉ định nhiều UID.
Xin lưu ý rằng bạn không thể sử dụng các phương thức addMatchingUsage()
và excludeUsage()
khi kết hợp cùng nhau. Bạn phải chọn một trong hai. Tương tự, bạn không thể sử dụng addMatchingUid()
và excludeUid()
.
Hạn chế chụp bởi các ứng dụng khác
Bạn có thể định cấu hình một ứng dụng để ngăn các ứng dụng khác ghi lại âm thanh của ứng dụng đó. Âm thanh từ một ứng dụng chỉ có thể được ghi lại nếu ứng dụng đó đáp ứng các yêu cầu sau:
Cách sử dụng
Trình phát tạo âm thanh phải thiết lập cách sử dụng
với USAGE_MEDIA
,
USAGE_GAME
hoặc
USAGE_UNKNOWN
Chính sách chụp
Chính sách chụp của người chơi phải
AudioAttributes.ALLOW_CAPTURE_BY_ALL
!
cho phép các ứng dụng khác ghi lại nội dung phát. Có thể thực hiện việc này theo một số cách:
- Để bật tính năng chụp ảnh trên tất cả người chơi, hãy thêm
android:allowAudioPlaybackCapture="true"
trong ứng dụngmanifest.xml
. - Bạn cũng có thể bật tính năng chụp ảnh trên tất cả người chơi bằng cách gọi
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
. - Bạn có thể đặt chính sách này cho từng trình phát khi xây dựng trình phát đó bằng
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
. (Nếu bạn đang sử dụng lệnh gọiAAudio
AAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
.)
Nếu đáp ứng những điều kiện tiên quyết này, người chơi có thể ghi lại mọi âm thanh.
Tắt chụp hệ thống
Các biện pháp bảo vệ cho phép chụp được mô tả ở trên chỉ áp dụng cho các ứng dụng. của Android
theo mặc định, các thành phần hệ thống có thể ghi lại nội dung phát.
Nhiều thành phần trong số này được các nhà cung cấp Android tuỳ chỉnh và các tính năng hỗ trợ
như hỗ trợ tiếp cận và phụ đề. Vì lý do này, ứng dụng nên
cho phép hệ thống ghi lại phát lại của họ. Trong trường hợp hiếm hoi khi bạn không
muốn hệ thống ghi lại phát lại của ứng dụng, hãy đặt chính sách ghi thành
ALLOW_CAPTURE_BY_NONE
.
Đặt chính sách trong thời gian chạy
Bạn có thể gọi AudioManager.setAllowedCapturePolicy()
để thay đổi ảnh chụp
chính sách khi ứng dụng đang chạy. Nếu MediaPlayer hoặc AudioTrack đang phát
khi bạn gọi phương thức này, âm thanh sẽ không bị ảnh hưởng. Bạn phải đóng rồi mở lại
trình phát hoặc theo dõi để thay đổi về chính sách có hiệu lực.
Chính sách = tệp kê khai + AudioManager + AudioAttributes
Vì chính sách chụp ảnh có thể được chỉ định ở nhiều nơi, nên điều quan trọng là
để hiểu cách xác định chính sách có hiệu quả.
Chính sách chụp ảnh hạn chế nhất luôn được áp dụng. Ví dụ: một ứng dụng có
tệp kê khai bao gồm setAllowedCapturePolicy="false"
sẽ không bao giờ cho phép các ứng dụng không thuộc hệ thống
để ghi lại âm thanh, ngay cả khi AudioManager#setAllowedCapturePolicy
được đặt
đến ALLOW_CAPTURE_BY_ALL
. Tương tự, nếu
AudioManager#setAllowedCapturePolicy
được đặt thành ALLOW_CAPTURE_BY_ALL
và
tệp kê khai đặt setAllowedCapturePolicy="true"
, nhưng
trình phát đa phương tiện
AudioAttributes
được xây dựng bằng
AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
, sau đó
Các ứng dụng không phải hệ thống sẽ không thể phát nội dung nghe nhìn này.
Bảng dưới đây tóm tắt tác động của thuộc tính tệp kê khai và chính sách có hiệu lực:
cho phép phát lại âm thanh | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
true | ứng dụng bất kỳ | chỉ hệ thống | không chụp |
false | chỉ hệ thống | chỉ hệ thống | không chụp |