【DAYU200】基于 DAYU200(RK3568)的统一互联文件互传接收成功后图库未能自动打开疑难攻关
设备环境

1. 问题描述
使用环境与设备: 两台 OpenHarmony L2 富设备(润和 DAYU200 / RK3568 开发板)做富对富文件互传;双端打开蓝牙、Wi-Fi 与「统一互联分享」开关。接收端运行 Share 应用 com.ohos.oneconnect.share(入口 Ability 为 ServiceExtAbility)。传输成功后,SinkModel.jumpToViewer 应通过 startAbility 拉起系统图库(Photos)或文件管理器预览。
问题现象(偶现): Sink 成功收到视频/图片后,未自动打开图库或文件管理器。
一句话概括:文件已接收成功,只是接收完成后没有自动打开查看页面。
2. 分析过程
正常预期:SendState.SUCCESS → SinkModel 延迟约 2 秒后调用 jumpToViewer → startAbility 打开图库/文件管理器。
未跳转时优先确认:
- 应用有没有进入 jumpToViewer
- 若进入了,失败原因是什么
相关日志:
08-05 20:07:43.251 1174 1174 I A00220/OneConnectShareApp: SinkModel: jumpToViewer in, will goto Photos
08-05 20:07:43.252 1174 1174 I A00220/OneConnectShareApp: NotificationManager: cancelNotification in
08-05 20:07:43.278 1174 1174 I A00220/OneConnectShareApp: NotificationManager: cancel success
08-05 20:07:43.304 1174 1174 I A00220/OneConnectShareApp: WindowManager: hide window[oneconnectshare.SinkDialog] success.
08-05 20:07:43.349 1174 1174 I A00220/OneConnectShareApp: SinkModel: jumpToViewer failed Error: The application does not have permission to call the interface., {"code":201}
结论:
- 已进入跳转(jumpToViewer in, will goto Photos)
- startAbility 失败,错误为 无权限调用该接口(code: 201)
跳转逻辑本身没有问题:按分享类型选择图库或文件管理器的 bundleName / abilityName,再对 ServiceExtensionContext 调用 startAbility。Share 以 ServiceExtAbility 为主入口,接收完成后半模态窗口已收起,进程常处于后台;系统要求从后台拉起其他应用的 UIAbility 必须持有:
ohos.permission.START_ABILITIES_FROM_BACKGROUND
可用命令核对权限声明与授权状态:
bm dump -n com.ohos.oneconnect.share
权限正常时关键字段大致如下:
"reqPermissionStates": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"reqPermissions": [
"ohos.permission.ACCESS_SERVICE_DM",
"ohos.permission.ALLOW_SHOW_NON_SECURE_WINDOWS",
"ohos.permission.DISTRIBUTED_DATASYNC",
"ohos.permission.FILE_ACCESS_MANAGER",
"ohos.permission.GET_BUNDLE_INFO_PRIVILEGED",
"ohos.permission.MANAGE_SECURE_SETTINGS",
"ohos.permission.NOTIFICATION_CONTROLLER",
"ohos.permission.READ_IMAGEVIDEO",
"ohos.permission.READ_MEDIA",
"ohos.permission.START_ABILITIES_FROM_BACKGROUND",
"ohos.permission.WRITE_MEDIA"
],
- reqPermissions:应用模块配置中声明的权限列表
- reqPermissionStates:与上表一一对应;0 通常表示已授权,-1 表示未生效
若缺少 START_ABILITIES_FROM_BACKGROUND,或对应 state 为 -1,就会出现本次 jumpToViewer failed / code: 201。
3. 解决方案
在 Share 应用模块配置的 requestPermissions 中声明该权限,并保证签名配置与安装包一致,使授权状态生效:
ohos.permission.START_ABILITIES_FROM_BACKGROUND
声明后重新安装/刷机,再用 bm dump 确认列表中含该权限且对应 reqPermissionStates 为 0,然后回归:传输成功后应能自动打开图库或文件管理器。
后续同类问题排查建议:
- 先确认 com.ohos.oneconnect.share 已正确申请且授权该后台启动权限
- 权限正常仍不跳转时,再查图库/文件管理器自身启动日志(区分「Share 没调 startAbility」与「对端 Ability 启动失败」)
更多推荐
所有评论(0)