Flutter OHOS fluttertpc_screenshot_callback
作者:flfljh
- 2024-12-18 湖南
本文字数:1012 字
阅读完需:约 3 分钟
screenshot_callback
监听系统截图
注意事项
Android 需要获取存储权限才能正常使用
需要真机才能验证截图
Flutter 中使用注意
如果在 flutter 中重写 didChangeAppLifecycleState,其中在三星手机上,侧面截图功能会执行 resumed 生命周期。
case AppLifecycleState.resumed: // 应用程序可见,前台
_screenshotCallback.startScreenshot();
break;
case AppLifecycleState.paused: // 应用程序不可见,后台
_screenshotCallback.stopScreenshot();
break;
复制代码
####鸿蒙 OS 代码
截图监听
/**
* 截图监听
*
* @param listener listener
*/
setListener(listener: OnScreenShotListener | null) {
this.mListener = listener
}
private onCallback: Callback<photoAccessHelper.ChangeData> = (changeData) => {
if (changeData && changeData.type == photoAccessHelper.NotifyType.NOTIFY_ADD && changeData.uris) {
Log.i(TAG, `listen receive screenshot->${changeData.uris}`);
for (let photo of changeData.uris) {
if (photo && photo.indexOf(SCREENSHOT_PREFIX) > 0) {
this.mListener && this.mListener.onShot(photo)
break
}
}
}
}
复制代码
开启截图监听
/**
* 开启截图监听
*
* @param windowClass windowClass
*/
async startListen(windowClass: window.Window | null): Promise<void> {
if (!windowClass) {
Log.w(TAG, "startListen window empty")
return
}
Log.i(TAG, "startListen")
abilityAccessCtrl.createAtManager()
.requestPermissionsFromUser(this.uiAbility?.context, ['ohos.permission.READ_IMAGEVIDEO'], async (err: BusinessError, data: PermissionRequestResult) => {
if (err) {
Log.e(TAG, `requestPermissionsFromUser fail, err->${JSON.stringify(err)}`);
this.mListener && this.mListener.onScreenCapturedWithDeniedPermission()
} else {
Log.i(TAG, `requestPermissionsFromUser succ->${data?.permissions?.toString()}}`);
this.phAccessHelper?.registerChange(photoAccessHelper.DefaultChangeUri.DEFAULT_PHOTO_URI, true, this.onCallback);
}
});
}
复制代码
停止截图监听
/**
* 停止截图监听
*/
stopListen(): void {
Log.i(TAG, "startListen")
this.phAccessHelper?.unRegisterChange(photoAccessHelper.DefaultChangeUri.DEFAULT_PHOTO_URI, this.onCallback);
}
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 5
flfljh
关注
还未添加个人签名 2024-10-29 加入
还未添加个人简介
评论