HarmonyOS鸿蒙Next中怎么动态获取添加日历的权限,并往日历中写入日程?

HarmonyOS鸿蒙Next中怎么动态获取添加日历的权限,并往日历中写入日程? HarmonyOS 怎么动态获取添加日历的权限,并往日历中写入日程?

3 回复

参考demo:

//Index.ets
import { BusinessError } from '@ohos.base';
import { calendarMgr } from '../entryability/EntryAbility';
import { calendarManager } from '@kit.CalendarKit';

@Entry
@Component
struct Index {

  build() {
    Column() {
      Button("添加日程").onClick(()=>{
        let calendar : calendarManager.Calendar | undefined = undefined;
        const date = new Date();
        const event: calendarManager.Event = {
          type: calendarManager.EventType.NORMAL,
          title:"参加读书会",
          startTime: date.getTime(),
          endTime: date.getTime() + 60 * 60 * 1000
        };
        calendarMgr?.getCalendar().then((data: calendarManager.Calendar) => {
          console.info(`Succeeded to get calendar, data -> ${JSON.stringify(data)}`);
          calendar = data;
          calendar.addEvent(event, (err: BusinessError, data: number): void => {
            if (err) {
              console.error(`Failed to addEvent, err -> ${JSON.stringify(err)}`);
            } else {
              console.info(`Succeeded to add event, id -> ${data}`);
            }
          });
        }).catch((err: BusinessError) => {
          console.error(`Failed to get calendar, err -> ${JSON.stringify(err)}`);
        });
      })
    }
    .height('100%')
  }
}
//EntryAbility .ets
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import hilog from '@ohos.hilog';
import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
import { ContextUtil } from '../ContextUtil';
import { Configuration } from '@ohos.app.ability.Configuration';
import { abilityAccessCtrl, common, ConfigurationConstant, PermissionRequestResult, Permissions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { calendarManager } from '@kit.CalendarKit';

export let calendarMgr: calendarManager.CalendarManager | null = null;
export let mContext: common.UIAbilityContext | null = null;

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    ContextUtil.mContext = this.context;
    ContextUtil.mConfiguration = this.context.config;
  }

  onDestroy(): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

    windowStage.loadContent('pages/Index25', (err, data) => {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
    });

    mContext = this.context;
    const permissions: Permissions[] = ['ohos.permission.READ_CALENDAR', 'ohos.permission.WRITE_CALENDAR'];
    let atManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(mContext, permissions).then((result: PermissionRequestResult) => {
      console.log(`get Permission success, result: ${JSON.stringify(result)}`);
      calendarMgr = calendarManager.getCalendarManager(mContext);
    }).catch((error: BusinessError) => {
      console.error(`get Permission error, error: ${JSON.stringify(error)}`);
    })
  }

  onWindowStageDestroy(): void {
    // Main window is destroyed, release UI related resources
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground(): void {
    // Ability has brought to foreground
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground(): void {
    // Ability has back to background
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }

  onConfigurationUpdate(newConfig: Configuration): void {
    ContextUtil.mConfiguration = newConfig;
  }
}
{
  "requestPermissions": [
    {
      "name": "ohos.permission.READ_CALENDAR",
      "reason": "$string:reason",
      "usedScene": {
        "abilities": [
          "EntryAbility"
        ],
        "when": "inuse"
      }
    },
    {
      "name": "ohos.permission.WRITE_CALENDAR",
      "reason": "$string:reason",
      "usedScene": {
        "abilities": [
          "EntryAbility"
        ],
        "when": "inuse"
      }
    }
  ]
}

更多关于HarmonyOS鸿蒙Next中怎么动态获取添加日历的权限,并往日历中写入日程?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,动态获取添加日历的权限并往日历中写入日程,可以通过以下步骤实现:

  1. 权限申请:首先需要在config.json文件中声明ohos.permission.WRITE_CALENDAR权限。然后在代码中使用requestPermissionsFromUser方法动态申请权限。

  2. 获取日历实例:使用CalendarManager类的getCalendar方法获取日历实例。

  3. 创建日程:使用CalendarEvent类创建日程对象,设置日程的标题、开始时间、结束时间等属性。

  4. 写入日程:调用日历实例的addEvent方法将日程写入日历。

以下是示例代码片段:

import Ability from '@ohos.application.Ability';
import calendar from '@ohos.calendar';
import permission from '@ohos.permission';

export default class MainAbility extends Ability {
    async onWindowStageCreate(windowStage) {
        // 动态申请权限
        await this.context.requestPermissionsFromUser([permission.WRITE_CALENDAR]);

        // 获取日历实例
        const calendarManager = calendar.getCalendarManager();
        const calendars = await calendarManager.getCalendars();

        if (calendars.length > 0) {
            const calendarInstance = calendars[0];

            // 创建日程
            const event = {
                title: 'Meeting',
                startTime: new Date().getTime(),
                endTime: new Date().getTime() + 3600000, // 1小时后
            };

            // 写入日程
            await calendarInstance.addEvent(event);
        }
    }
}

通过以上步骤,可以在HarmonyOS鸿蒙Next中动态获取日历权限并写入日程。

在HarmonyOS鸿蒙Next中,动态获取日历权限并写入日程的步骤如下:

  1. 权限申请:首先在config.json中声明ohos.permission.WRITE_CALENDAR权限,并在运行时通过requestPermissionsFromUser方法动态申请权限。

  2. 日历写入:使用CalendarManager类获取日历实例,创建CalendarEvent对象设置日程信息,最后通过insertEvent方法插入日程。

  3. 示例代码

    import calendarManager from '[@ohos](/user/ohos).calendar';
    
    // 动态申请权限
    let permissions = ['ohos.permission.WRITE_CALENDAR'];
    requestPermissionsFromUser(permissions).then(() => {
        // 获取日历实例
        calendarManager.getCalendarAccount().then(account => {
            let event = {
                calendarId: account.id,
                title: 'Meeting',
                startTime: Date.now(),
                endTime: Date.now() + 3600000
            };
            // 插入日程
            calendarManager.insertEvent(event);
        });
    });
    

确保在config.json中正确配置权限,并在运行时处理权限申请的结果。

回到顶部