HarmonyOS鸿蒙Next中团结引擎如何申请访问所有文件
HarmonyOS鸿蒙Next中团结引擎如何申请访问所有文件 最近有个unity游戏想要适配鸿蒙next,于是在团结引擎里面找到了编译open harmony的选项,且能正常导出deveco studio工程并编译。但是游戏资源文件比较大,我想要访问公用储存空间方便用户导入游戏资源包,没有找到unity的C#和鸿蒙的arkts对接并申请相关权限的方法,请问有没有人能分享一下?
楼主可参考下面步骤:
1/ 在module.json5中声明存储权限:
"requestPermissions": [
{
"name": "ohos.permission.READ_MEDIA",
"reason": "读取游戏资源包"
},
{
"name": "ohos.permission.WRITE_MEDIA",
"reason": "保存游戏资源包"
}
]
2/ 创建权限申请模块:
import abilityAccessCtrl from '@kit.AbilityKit';
async function requestPermissions(context: common.Context): Promise<boolean> {
const atManager = abilityAccessCtrl.createAtManager();
try {
await atManager.requestPermissionsFromUser(context,
['ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA']);
return true;
} catch (err) {
return false;
}
}
3/ 实现文件路径获取接口:
import fs from '@kit.CoreFileKit';
function getPublicDir(): string {
return `${fs.BaseDir.USER}/${getContext().bundleName}/files/GameResources`;
}
4/ 在C#中通过JSI调用原生接口:
#if UNITY_HARMONYOS
using HarmonyEngine.Runtime;
public class PermissionHelper : MonoBehaviour
{
[ExternalJSIFunction]
public static bool RequestStoragePermission()
{
return JSIHelper.CallStaticMethod<bool>("ohos.samples.PermissionUtils",
"requestPermissions");
}
[ExternalJSIFunction]
public static string GetResourcePath()
{
return JSIHelper.CallStaticMethod<string>("ohos.samples.PathUtils",
"getPublicDir");
}
}
#endif
5/ 使用公共目录路径加载资源:
void LoadResourceBundle()
{
string resourcePath = PermissionHelper.GetResourcePath();
string bundlePath = Path.Combine(resourcePath, "level1.assetbundle");
AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(bundlePath);
request.completed += OnBundleLoaded;
}
更多关于HarmonyOS鸿蒙Next中团结引擎如何申请访问所有文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
1.Unity(C#) 侧只做游戏逻辑,不直接碰文件系统 2.在 DevEco 导出的 ArkTS 壳工程里统一申请公共目录权限,拿到文件路径后再把路径/二进制回传给 Unity 这是相关思路,望可以帮助你
你好,请问有什么办法可以在C#里面调用ArkTS定义的函数来获取文件路径吗?我在网上翻遍了也没找到C#调ArkTS的方法。
期待HarmonyOS能继续优化多屏协同功能,让跨设备体验更加完美。
只能通过插件一类的,
在HarmonyOS Next中,团结引擎申请访问所有文件需使用FilePicker模块。通过调用picker.select()
方法并设置FileSelectOptions
的selectType
为FILE
,同时指定permission
为GRANT_READ_URI_PERMISSION
。在picker.select()
回调中获取文件URI,通过fs.open()
操作文件。需在module.json5
中声明ohos.permission.READ_XXX
权限。
在HarmonyOS Next中,团结引擎通过ArkTS与Unity C#的交互需使用Native API桥接。访问公共存储空间需申请ohos.permission.READ_MEDIA
和ohos.permission.WRITE_MEDIA
权限。具体步骤如下:
- 在
module.json5
中声明权限:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.READ_MEDIA",
"reason": "用于读取用户游戏资源"
},
{
"name": "ohos.permission.WRITE_MEDIA",
"reason": "用于写入游戏资源包"
}
]
}
}
-
通过ArkTS调用权限申请: 使用
abilityAccessCtrl
的requestPermissionsFromUser
方法动态申请权限。 -
C#与ArkTS交互:
- 在Unity C#中通过
UnitySendMessage
调用ArkTS侧方法 - ArkTS侧通过
Native API
暴露文件操作接口(如使用@ohos.file.fs
模块) - 通过回调机制将文件路径或数据传回Unity
示例ArkTS文件操作接口:
// 导出Native方法供C#调用
export default class FileManager {
public static getExternalStoragePath(): string {
return globalThis.abilityContext.filesDir + '/../';
}
public static readFile(uri: string): Uint8Array {
const file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
const content = fs.readSync(file.fd);
fs.closeSync(file);
return content;
}
}
需注意:首次权限申请需在ArkTS侧完成,Unity中可通过监听回调状态处理后续逻辑。