HarmonyOS鸿蒙Next中无法获取所有日历账户列表
HarmonyOS鸿蒙Next中无法获取所有日历账户列表
问题步骤如下:
-
项目中创建了calendar(hsp)
-
想在calendar模块中想获取如下权限
'ohos.permission.READ_CALENDAR', 'ohos.permission.WRITE_CALENDAR'
- 已在entry中的module.json5中添加权限(但没在calendar的module.json5中添加)
{
"name": "ohos.permission.WRITE_CALENDAR",
"reason": "$string:calendar_write_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_CALENDAR",
"reason": "$string:calendar_read_permission_reason",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
- 在calendar模块的页面调用获取权限申请
try {
const permissions: Permissions[] = ['ohos.permission.READ_CALENDAR', 'ohos.permission.WRITE_CALENDAR'];
let atManager = abilityAccessCtrl.createAtManager();
const result = await atManager.requestPermissionsFromUser(getContext(this) as common.UIAbilityContext, permissions)
console.log('result = ',JSON.stringify(result))
let calendarMgr = calendarManager.getCalendarManager(getContext())
const rsp: calendarManager.Calendar[] = await calendarMgr.getAllCalendars()
console.log('calendars =', JSON.stringify(rsp))
} catch (e) {
}
如下是执行结果
result = {
"permissions":["ohos.permission.READ_CALENDAR","ohos.permission.WRITE_CALENDAR"],
"authResults":[0,0],
"dialogShownResults":[true,true]
}
calendars = []
-
可见权限已经获取到了,但是获取日历是空,但是系统日历中是存在“我的日历”的。
-
当我杀死应用,重新启动应用时,就能获取到日历数据,输入如下:
calendars = [{"id":1}]
-
当我尝试将第“4”步的代码,复制到entry中的index.ets(应用首页)时可以直接获取到日历数据。
-
总结:在hsp中申请权限并立刻获取日历数据是空,必须杀死应用重启才可以活动;但是在entry中可以直接获取,请问我是哪个步骤出了问题吗?
更多关于HarmonyOS鸿蒙Next中无法获取所有日历账户列表的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,无法获取所有日历账户列表可能是由于权限限制或API调用方式不正确。确保应用已申请ohos.permission.READ_CALENDAR
权限,并在config.json
中正确配置。使用calendar.getCalendarAccounts()
方法时,需确认参数和回调函数设置无误。若问题依旧,可能是系统版本或设备兼容性问题。
更多关于HarmonyOS鸿蒙Next中无法获取所有日历账户列表的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
根据你的描述,问题可能出在权限请求和日历数据获取的时序处理上。在HSP模块中直接请求权限后立即获取日历数据时,系统可能还没有完全完成权限的同步处理。建议在权限请求成功后添加短暂延迟再获取日历数据:
try {
const permissions: Permissions[] = ['ohos.permission.READ_CALENDAR', 'ohos.permission.WRITE_CALENDAR'];
let atManager = abilityAccessCtrl.createAtManager();
const result = await atManager.requestPermissionsFromUser(getContext(this) as common.UIAbilityContext, permissions)
// 添加500ms延迟确保权限完全生效
await new Promise(resolve => setTimeout(resolve, 500));
let calendarMgr = calendarManager.getCalendarManager(getContext())
const rsp: calendarManager.Calendar[] = await calendarMgr.getAllCalendars()
console.log('calendars =', JSON.stringify(rsp))
} catch (e) {
console.error(e)
}
另外,确保在calendar模块的module.json5中也声明了所需的权限,尽管entry中已经声明,但在HSP模块中使用时建议重复声明。