Flutter中screenshot_callback无法检测截图问题求助
Flutter screenshot_callback 插件无法检测截图问题的解决方案
一、Android 端配置检查
- 除已添加的
DETECT_SCREEN_CAPTURE权限外,需在AndroidManifest.xml的<application>标签内注册插件的广播接收器,确保系统能把截图事件传递给插件:
<receiver android:name="com.marmot.screenshot_callback.ScreenshotReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.SCREENSHOT" /> </intent-filter> </receiver>
- 注意:
DETECT_SCREEN_CAPTURE仅适配 Android 12(API 31)及以上系统,低版本设备插件会通过监听媒体文件变化实现检测,无需额外权限,但需确保设备存储相关逻辑正常。
二、iOS 端配置检查
iOS 无直接截图事件回调,插件通过监听相册新增图片判断截图,必须在 Info.plist 中添加相册权限描述:
<key>NSPhotoLibraryAddUsageDescription</key> <string>需要访问相册以检测截图操作</string> <key>NSPhotoLibraryUsageDescription</key> <string>需要访问相册以检测截图操作</string>
添加后首次启动 App 会弹窗请求权限,用户授权后插件才能正常工作。
三、代码实现修正
你的代码仅添加了监听,但未启动插件的监听服务,需补充启动逻辑,同时在页面销毁时停止监听避免内存泄漏:
ScreenshotCallback? _screenshotCallback; @override void initState() { super.initState(); _screenshotCallback = ScreenshotCallback(); // 添加截图监听 _screenshotCallback?.addListener(() { print('detect screenshot'); // 执行你的业务逻辑 }); // 启动监听(关键步骤,缺失则无法检测) _screenshotCallback?.startListening(); } @override void dispose() { // 停止监听并释放资源 _screenshotCallback?.stopListening(); _screenshotCallback?.dispose(); super.dispose(); }
四、额外排查点
- 确认插件为最新版本,可执行
flutter pub upgrade screenshot_callback更新,旧版本可能存在兼容性问题。 - Android 低版本设备的截图检测依赖媒体扫描,可能存在延迟或部分机型不兼容,建议优先用 Android 12+ 设备测试。
- iOS 端截图后需等待相册同步(约1-2秒),插件才会触发回调,不要立即判定无效。
内容的提问来源于stack exchange,提问作者princeonwhitemb
相关产品推荐
相关产品推荐

