You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 13:42:41