HarmonyOS鸿蒙Next中使用Share Kit分享沙箱文件失败
HarmonyOS鸿蒙Next中使用Share Kit分享沙箱文件失败 分享的文件类型为zip,可以确定路径正确,文件大小不为0且没有损坏。
拉起系统分享面板后,不显示文件大小,点击任意分享方式,都提示“您选择的文件不支持分享”。
分享内容改为txt、或者修改UniformDataType现象还是一样。
设备类型为2in1,是需要什么权限吗?
let uri = fileUri.getUriFromPath(outFile)
let shareData: systemShare.SharedData = new systemShare.SharedData({
utd: utd.UniformDataType.FILE,
uri,
})
let controller: systemShare.ShareController = new systemShare.ShareController(shareData)
controller.show(context, {
selectionMode: systemShare.SelectionMode.SINGLE,
previewMode: systemShare.SharePreviewMode.DETAIL,
}).then(() => {
hilog.info(0, TAG, 'share controller show successful')
}).catch((error: BusinessError) => {
hilog.error(0, TAG, `share controller show error. code=${error.code}, message=${error.message}`)
})
.applicationInfo.name + getContext().getApplicationContext().filesDir + '/xxx.zip';
或通过getUriFromPath将沙箱路径转成uri:
let pathInSandbox = getContext().getApplicationContext().filesDir + '/xxx.zip';
let uri = fileUri.getUriFromPath(pathInSandbox);
更多关于HarmonyOS鸿蒙Next中使用Share Kit分享沙箱文件失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
路径: uri
文件名: 都是没有问题的,请看3楼
确定文件路径是没有问题的,但是问题现象一致,代码如下
hilog.info(0, TAG, 'filepath=' + outFile)
const stat = fs.statSync(outFile)
hilog.info(0, TAG, 'filesize=' + stat.size + ', mode=' + stat.mode)
let uri = fileUri.getUriFromPath(outFile)
hilog.info(0, TAG, 'uri=' + uri)
let shareData: systemShare.SharedData = new systemShare.SharedData({
utd: utd.UniformDataType.ZIP_ARCHIVE,
uri,
})
let controller: systemShare.ShareController = new systemShare.ShareController(shareData)
controller.show(context, {
selectionMode: systemShare.SelectionMode.SINGLE,
previewMode: systemShare.SharePreviewMode.DETAIL,
}).then(() => {
hilog.info(0, TAG, 'share controller show successful')
}).catch((error: BusinessError) => {
hilog.error(0, TAG, `share controller show error. code=${error.code}, message=${error.message}`)
})
执行后的日志
03-25 17:31:13.532 19644-19644 A00000/net.inf...o/StringUtils I filepath=/data/storage/el2/base/haps/entry/files/abcd.zip
03-25 17:31:13.532 19644-19644 A00000/net.inf...o/StringUtils I filesize=2762, mode=436
03-25 17:31:13.532 19644-19644 A00000/net.inf...o/StringUtils I uri=file://此处为包名/data/storage/el2/base/haps/entry/files/abcd.zip
03-25 17:31:13.532 19644-19644 C04611/net.inf...stemShareNapi I [NapiSharedData.cpp] ConstructorCallback# Constructor - 545911236416
03-25 17:31:13.532 19644-19644 C04611/net.inf...stemShareNapi I [NapiShareControllerV2.cpp] ConstructorCallback# ConstructorCallback
03-25 17:31:13.532 19644-19644 C04611/net.inf...stemShareNapi I [NapiShareControllerV2.cpp] NapiShareControllerV2# NapiShareControllerV2
03-25 17:31:13.533 19644-19644 C04611/net.inf...stemShareNapi I [NapiShareControllerV2.cpp] ConstructorCallback# ConstructorCallback this native address 545911236416
03-25 17:31:13.533 19644-19644 C04611/net.inf...stemShareNapi I [NapiShareControllerV2.cpp] ShowCallback# ShowCallback
03-25 17:31:13.533 19644-19644 C04611/net.inf...stemShareNapi I [NapiShareControllerV2.cpp] ShowCallback# ShowCallback CheckAndParseShowParams 0, OK.
03-25 17:31:13.533 19644-19644 C04611/net.inf...stemShareNapi I [NapiShareControllerV2.cpp] ShowCallback# RefSelf
03-25 17:31:13.533 19644-19644 C04611/net.inf...stemShareNapi I [NapiShareControllerV2.cpp] Show# Show enter
03-25 17:31:13.533 19644-19644 C04611/net.inf...stemShareNapi I [NapiSharedData.cpp] WriteToWantParams# WriteToWantParams start
03-25 17:31:13.533 19644-19644 C04611/net.inf...stemShareNapi W [NapiSharedData.cpp] SetThumbnailToWantParams# Unsupported thumbnail
03-25 17:31:13.533 19644-19644 C04611/net.inf...stemShareNapi I [NapiSharedData.cpp] WriteToWantParams# WriteToWantParams done 1
03-25 17:31:13.533 19644-19644 C04614/net.inf...areController I [ShareController.cpp] SetCallbacks# SetCallbacks enter
03-25 17:31:13.533 19644-19644 C04614/net.inf...areController I [ShareController.cpp] SetCallbacks# SetCallbacks exit
03-25 17:31:13.533 19644-19644 C04614/net.inf...areController I [ModalShareController.cpp] Startup# Startup start
03-25 17:31:13.533 19644-19644 C04614/net.inf...areController I [ModalShareController.cpp] GetWindow# GetWindow done, use UIAbility context.
03-25 17:31:13.533 19644-19644 C04200/net.inf...pnsdkdemo/WMS I [] GetContext(1525): name:vpnsdkdemo0, id:153
03-25 17:31:13.533 19644-19644 C04202/net.inf...kdemo/WMSMain I [] GetMainWindowWithContext(2948): Find MainWinId:153.
03-25 17:31:13.533 19644-19644 C04614/net.inf...areController I [ModalShareController.cpp] GetWindow# GetWindow done, use UIAbility context.
03-25 17:31:13.533 19644-19644 C04200/net.inf...pnsdkdemo/WMS I [] GetContext(1525): name:vpnsdkdemo0, id:153
03-25 17:31:13.533 19644-19644 C04202/net.inf...kdemo/WMSMain I [] GetMainWindowWithContext(2948): Find MainWinId:153.
03-25 17:31:13.533 19644-19644 C04614/net.inf...areController I [ModalShareController.cpp] SetupCallbacks# SetupCallbacks
03-25 17:31:13.533 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@197][ID: 1] The modal UIExtension is created.
03-25 17:31:13.533 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@690][ID: 1] OnAttachToFrameNode
03-25 17:31:13.533 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@329][ID: 1] The current state is 'NONE' when UpdateWant, needCheck: '0'.
03-25 17:31:13.533 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@356][ID: 1] The ability KeyAsync 0, uIExtensionUsage: 0.
03-25 17:31:13.533 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@301][ID: 0] The session is created with bundle = com.huawei.hmos.instantshare, ability = SystemShareModalAbility
03-25 17:31:13.533 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@342][ID: 0] Want param isNotifyOccupiedAreaChange is 1, realHostWindowId: 153, parentWindowType: 1
03-25 17:31:13.534 19644-19908 C04207/net.inf...demo/WMSFocus I [] Session(98): focusedOnShow:1
03-25 17:31:13.534 19644-19908 C0420A/net.inf...kdemo/WMSLife I [] GeneratePersistentId(3083): persistentId: 0, persistentId_: 1154203651
03-25 17:31:13.534 19644-19908 C0420D/net.inf...demo/WMSUiext I []: persistentId: 1154203651, bundleName: com.huawei.hmos.instantshare, moduleName: , abilityName: SystemShareModalAbility, isDensityFollowHost_: 1, density_: 1.250000
03-25 17:31:13.534 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@627][ID: 1] The state is changing from 'NONE' to 'FOREGROUND'.
03-25 17:31:13.534 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@558][ID: 0] NotifyForeground, persistentid = 1154203651, hostWindowId = 153, windowSceneId = -1, IsScenceBoardWindow: 0.
03-25 17:31:13.534 19644-19908 C04200/net.inf...essionManager I (120)operator(): Activate session with persistentId: 1154203651
03-25 17:31:13.535 19644-19644 C0390D/net.inf...mo/AceOverlay I [(100000:100000:scope)] modalNode->GetParent() 3 mark IsProhibitedAddChildNode when sessionId -1154203651,prohibitedRemoveByRouter: 0, isAllowAddChildBelowModalUec: 0.
03-25 17:31:13.535 19644-19644 C0391C/net.inf...emo/AceFocus I [(100000:100000:scope)] FocusView: ModalPage/127 show
03-25 17:31:13.535 19644-19644 C0391C/net.inf...emo/AceFocus I [(100000:100000:scope)] FocusView: page/21 lost focus
03-25 17:31:13.535 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [此处为包名][entry][100000]: create modal page, sessionId=1154203651, isProhibitBack=0, isAsyncModalBinding=0, isAllowedBeCovered=0, prohibitedRemoveByRouter=0, isAllowAddChildBelowModalUec=0, prohibitedRemoveByNavigation=1
03-25 17:31:13.535 19644-19644 C04614/net.inf...areController I [ModalShareController.cpp] Startup# Startup modal uiextension <1154203651> in window <153>
03-25 17:31:13.535 19644-19644 C04614/net.inf...areController I [ModalShareController.cpp] Startup# Startup end
03-25 17:31:13.535 19644-19644 C04611/net.inf...stemShareNapi I [NapiShareControllerV2.cpp] ShowCallback# ShowCallback done
03-25 17:31:13.535 19644-19644 C03900/net.inf...pnsdkdemo/Ace I [(100000:100000:scope)] Begin to show dialog
03-25 17:31:13.535 19644-19644 C0390F/net.inf...emo/AceDialog I [(100000:100000:scope)] dialog GetContext fontScale : 1.000000
03-25 17:31:13.535 19644-19644 C03900/net.inf...pnsdkdemo/Ace W [(100000:100000:scope)] Current Node(id: 3) is prohibited add child(tag AlertDialog, id: 128), Current modalUiextension count is : 1
03-25 17:31:13.535 19644-19644 C03952/net.inf...emo/AceAppBar I [(100000:100000:scope)] SetCloseButtonStatus isEnabled: 0
03-25 17:31:13.548 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@794][ID: 0] NotifyDisplayArea displayArea = RectT (516.00, 402.00) - [1447.00 x 919.00], curWindow = Rect (516.00, 356.00) - [1447.00 x 965.00], reason = 0, duration = 0, persistentId = 1154203651.
03-25 17:31:13.548 19644-19644 C0391C/net.inf...emo/AceFocus I [(100000:100000:scope)] Request focus on focusView: ModalPage/127.
03-25 17:31:13.548 19644-19644 C0391C/net.inf...emo/AceFocus I [(100000:100000:scope)] Focus view has no default focus.
03-25 17:31:13.548 19644-19644 C0391C/net.inf...emo/AceFocus I [(100000:100000:scope)] FocusSwitch end, Column/secure_field onBlur, ModalPage/secure_field onFocus, start: 2, end: 1, update: 2
03-25 17:31:13.549 19644-19644 C03933/net.inf...emo/AceKeyboard I [(100000:100000:scope)] current focus node info : (ModalPage/127).
03-25 17:31:13.549 19644-19644 C03933/net.inf...emo/AceKeyboard I [(100000:100000:scope)] FrameNode(ModalPage/127) notNeedSoftKeyboard.
03-25 17:31:13.549 19644-19644 C03933/net.inf...emo/AceKeyboard I [(100000:100000:scope)] Ime Not Shown, Ime Not Attached, No need to close keyboard
03-25 17:31:13.549 19644-19644 C0391C/net.inf...emo/AceFocus I [(100000:100000:scope)] Request focus on root scope: ModalPage/127 return: 1.
03-25 17:31:13.619 19644-19695 C01406/net.inf...emo/OHOS::RS I Post messageId:26, cmdCount:1, instanceId:100000
03-25 17:31:13.619 19644-19644 C01406/net.inf...emo/OHOS::RS I Process messageId:26, cmdCount:1, instanceId:100000
03-25 17:31:13.704 19644-19695 C01406/net.inf...emo/OHOS::RS I Post messageId:27, cmdCount:1, instanceId:100000
03-25 17:31:13.705 19644-19644 C01406/net.inf...emo/OHOS::RS I Process messageId:27, cmdCount:1, instanceId:100000
03-25 17:31:13.705 19644-19644 C0391C/net.inf...emo/AceFocus I [(100000:100000:scope)] FocusView: AlertDialog/128 show
03-25 17:31:13.728 19644-19908 C0420A/net.inf...kdemo/WMSLife I [] ConnectInner(1065): ConnectInner session, id: 1154203651, state: 0,isTerminating:0, callingPid:22133
03-25 17:31:13.728 19644-19908 C04208/net.inf...emo/WMSLayout I [] InitSystemSessionDragEnable(1151): windId: 1154203651, defaultDragEnable: 0, isSystemWindow: 0, isDialog: 0, isSubWindow: 0, isSystemCalling: 0
03-25 17:31:13.728 19644-19908 C04202/net.inf...kdemo/WMSMain I [] InitSessionPropertyWhenConnect(1120): windId: 1154203651, requestedOrientation: 0, defaultRequestedOrientation: 0
03-25 17:31:13.728 19644-19908 C0420C/net.inf...emo/WMSEvent I [] SetCallingPid(799): id:1154203651, callingPid:22133
03-25 17:31:13.728 19644-19908 C0420A/net.inf...kdemo/WMSLife I []: sessionStateChangeFunc is null
03-25 17:31:13.728 19644-19908 C0420A/net.inf...kdemo/WMSLife I []: sessionStateChangeNotifyManagerFunc is null
03-25 17:31:13.728 19644-19644 C0392A/net.inf...sionComponent I [(-1:100000:singleton)] [@411][ID: 1] The session is connected and the current state is 'FOREGROUND'.
03-25 17:31:13.729 19644-19644 C0392A/net.inf...sionComponent I [(100000:100000:scope)] [@1052][ID: 1] OnRemoteReady the current state is 'FOREGROUND'.
03-25 17:31:13.729 19644-19644 C04614/net.inf...areController I [ModalShareController.cpp] operator()# controller call OnUIExtensionRemoteReady(PH_FORWARD(ph1))
03-25 17:31:13.729 19644-19644 C04611/net.inf...stemShareNapi I [ModalShareController.cpp] OnUIExtensionRemoteReady# OnUIExtensionRemoteReady
03-25 17:31:13.729 19644-19644 C04611/net.inf...stemShareNapi I [NapiShareControllerV2.cpp] OnStartup# OnStartup 0
03-25 17:31:13.729 19644-19644 A00000/net.inf...o/StringUtils I share controller show successful
你好,zip文件的UniformDataType为ZIP_ARCHIVE,修改一下utd试试
参考地址:[https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-data-uniformtypedescriptor](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-data-uniformtypedescriptor)
修改为ZIP_ARCHIVE依旧现象一致,
在HarmonyOS鸿蒙Next中,使用Share Kit分享沙箱文件失败可能涉及以下原因:
-
权限问题:确保应用已获取必要的文件访问权限,包括
ohos.permission.READ_MEDIA
和ohos.permission.WRITE_MEDIA
。 -
文件路径错误:检查文件路径是否正确,确保文件存在于沙箱目录中,路径格式为
internal://app/
或file:///data/storage/el2/base/
。 -
Share Kit配置:确认Share Kit的配置正确,包括
ability
和intent
的配置,确保intent
的action
和type
设置正确。 -
文件类型支持:确保Share Kit支持分享的文件类型,某些文件类型可能不被支持。
-
系统版本兼容性:检查系统版本是否与Share Kit的API兼容,某些API可能在特定版本中不可用。
-
日志分析:查看系统日志,定位具体错误信息,日志可通过
HiLog
或Logcat
获取。 -
沙箱机制限制:鸿蒙的沙箱机制可能限制文件访问,确保文件在沙箱内可访问。
-
API调用顺序:确保API调用顺序正确,如先初始化Share Kit再调用分享功能。
-
文件大小限制:检查文件大小是否超过Share Kit的限制,大文件可能导致分享失败。
-
网络状态:如果分享涉及网络传输,确保设备网络连接正常。
以上是可能导致Share Kit分享沙箱文件失败的原因,需逐一排查。
在HarmonyOS鸿蒙Next中,使用Share Kit分享沙箱文件失败,可能原因包括:
- 权限问题:确保应用已获取必要的文件读写权限。
- 文件路径错误:确认文件路径正确且文件存在。
- Share Kit配置:检查Share Kit的初始化及配置是否正确。
- 系统限制:部分沙箱文件可能因系统策略无法分享。
- 日志排查:查看日志以获取具体错误信息。
建议逐一排查上述问题,确保配置正确且文件可访问。