This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
Expo ScreenCapture
一个可让你保护应用中的屏幕,防止其被截取或录制的库。
expo-screen-capture 可保护应用中的屏幕,防止被截屏或录制,也可以在应用处于前台时,有人截屏后通知你。最常见的两种需要阻止屏幕捕获的情况是:
- 屏幕上显示敏感信息(密码、信用卡信息等)
- 你正在展示不希望被录制和分享的付费内容
这在 Android 上尤为重要,因为 android.media.projection API 允许第三方应用执行屏幕捕获或屏幕共享(即使应用在后台运行)。
在 Android 上,屏幕捕获回调无需额外权限即可在 Android 14+ 上使用。在 Android 14+ 上,阻止屏幕捕获或使用回调都无需请求或检查权限。
如果你想在 Android 13 或更低版本上使用屏幕捕获回调,则需要将 READ_MEDIA_IMAGES 权限添加到 AndroidManifest.xml 文件中。你可以在应用配置中使用 android.permissions 键。有关更多信息,请参阅 Android 权限。
只有需要广泛访问照片的应用才能添加
READ_MEDIA_IMAGES权限。请参阅 Google Play 照片和视频权限政策详情。
测试屏幕捕获功能:在 Android Emulator 上,在单独的终端中运行
adb shell input keyevent 120以触发截屏。在 iOS Simulator 上,你可以从菜单栏中选择 Device > Trigger Screenshot 来触发截屏。
安装
If you are installing this in an existing React Native app, make sure to install expo in your project.
用法
示例:hook
示例:以命令式方式阻止屏幕捕获
示例:屏幕捕获回调
API
import * as ScreenCapture from 'expo-screen-capture';
Hooks
Check or request permissions necessary for detecting when a screenshot is taken.
This uses both requestPermissionsAsync and getPermissionsAsync to interact with the permissions.
[PermissionResponse | null, RequestPermissionMethod<PermissionResponse>, GetPermissionMethod<PermissionResponse>]Example
const [status, requestPermission] = ScreenCapture.usePermissions();
A React hook to prevent screen capturing for as long as the owner component is mounted.
voidA React hook that listens for screenshots taken while the component is mounted.
voidMethods
Re-allows the user to screen record or screenshot your app. If you haven't called
preventScreenCapture() yet, this method does nothing.
Promise<void>Disables the privacy protection overlay that was previously enabled with enableAppSwitcherProtectionAsync.
Promise<void>Enables a privacy protection blur overlay that hides sensitive content when the app is not in focus. The overlay applies a customizable blur effect when the app is in the app switcher, background, or during interruptions (calls, Siri, Control Center, etc.), and automatically removes it when the app becomes active again.
This provides visual privacy protection by preventing sensitive app content from being visible in:
- App switcher previews
- Background app snapshots
- Screenshots taken during inactive states
For Android, app switcher protection is automatically provided by preventScreenCaptureAsync()
using the FLAG_SECURE window flag, which shows a blank screen in the recent apps preview.
Promise<void>Checks user's permissions for detecting when a screenshot is taken.
Only Android requires additional permissions to detect screenshots. On iOS devices, this method will always resolve to a
grantedpermission response.
Promise<PermissionResponse>A promise that resolves to a PermissionResponse object.
Returns whether the Screen Capture API is available on the current device.
Promise<boolean>A promise that resolves to a boolean indicating whether the Screen Capture API is available on the current
device.
Prevents screenshots and screen recordings until allowScreenCaptureAsync is called or the app is restarted. If you are
already preventing screen capture, this method does nothing (unless you pass a new and unique key).
On iOS, this prevents screen recordings and screenshots, and is only available on iOS 11+ (recordings) and iOS 13+ (screenshots). On older iOS versions, this method does nothing.
Promise<void>Asks the user to grant permissions necessary for detecting when a screenshot is taken.
Only Android requires additional permissions to detect screenshots. On iOS devices, this method will always resolve to a
grantedpermission response.
Promise<PermissionResponse>A promise that resolves to a PermissionResponse object.
Event subscriptions
Adds a listener that will fire whenever the user takes a screenshot while the app is foregrounded.
Permission requirements for this method depend on your device’s Android version:
- Before Android 13: Requires
READ_EXTERNAL_STORAGE. - Android 13: Switches to
READ_MEDIA_IMAGES. - Post-Android 13: No additional permissions required.
You can request the appropriate permissions by using
MediaLibrary.requestPermissionsAsync().
EventSubscriptionA Subscription object that you can use to unregister the listener, either by calling
remove() or passing it to removeScreenshotListener.
Deprecated: use subscription.remove() instead.
Removes the subscription you provide, so that you are no longer listening for screenshots.
voidA React hook that listens for screenshots taken while the component is mounted.
voidInterfaces
A subscription object that allows to conveniently remove an event listener from the emitter.
Types
Literal type: union
Acceptable values are: PermissionHookBehavior | Options