HarmonyOS鸿蒙Next中做一个计时工具设置代理提醒时候出现问题

HarmonyOS鸿蒙Next中做一个计时工具设置代理提醒时候出现问题

const TAG: string = '[Page2]';
const DOMAIN_NUMBER: number = 0xFF00;
const REMINDER_ID: number = 100;

@Component
struct Page2 {
  @State message: string = 'Reminder Controller';
  private context: common.UIAbilityContext = this.getContext(this) as common.UIAbilityContext;
  private reminderId: number = REMINDER_ID;

  // 提醒代理配置
  private targetReminderAgent: reminderAgentManager.ReminderRequestTimer = {
    reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_TIMER,
    triggerTimeInSeconds: 10,
    actionButton: [
      {
        title: '关闭',
        type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
      }
    ],
    wantAgent: {
      pkgName: 'com.example.myapplication',
      abilityName: 'EntryAbility'
    },
    title: '定时提醒',
    content: '您设置的10秒倒计时已到!',
    expiredContent: '提醒已过期',
    notificationId: REMINDER_ID,
    slotType: notificationManager.SlotType.SOCIAL_COMMUNICATION
  };

  // 生命周期函数:组件创建时自动检查权限
  aboutToAppear() {
    this.checkAndRequestNotificationPermission();
  }

  // 检查通知权限
  private async checkAndRequestNotificationPermission() {
    try {
      const isEnabled = await notificationManager.isNotificationEnabled();
      hilog.info(DOMAIN_NUMBER, TAG, `通知权限状态: ${isEnabled}`);
      if (!isEnabled) {
        await notificationManager.requestEnableNotification(this.context);
        hilog.info(DOMAIN_NUMBER, TAG, '已请求通知权限');
      }
    } catch (err) {
      hilog.error(DOMAIN_NUMBER, TAG, `权限检查失败: ${err.code} - ${err.message}`);
    }
  }

  // 发布提醒
  private async publishReminder() {
    try {
      this.reminderId = await reminderAgentManager.publishReminder(this.targetReminderAgent);
      hilog.info(DOMAIN_NUMBER, TAG, `提醒发布成功,ID: ${this.reminderId}`);
      this.message = '提醒已设置(10秒)';
    } catch (err) {
      hilog.error(DOMAIN_NUMBER, TAG, `发布失败: ${err.code} - ${err.message}`);
      this.message = '设置提醒失败';
    }
  }

  // 取消提醒
  private async cancelReminder() {
    try {
      await reminderAgentManager.cancelReminder(this.reminderId);
      hilog.info(DOMAIN_NUMBER, TAG, '提醒已取消');
      this.message = '提醒已取消';
    } catch (err) {
      hilog.error(DOMAIN_NUMBER, TAG, `取消失败: ${err.code} - ${err.message}`);
      this.message = '取消提醒失败';
    }
  }

  build() {
    Column() {
      Text(this.message)
        .fontSize(20)
        .margin(20)

      Button('设置10秒提醒')
        .width(200)
        .height(60)
        .margin(10)
        .onClick(() => {
          this.publishReminder();
        })

      Button('取消提醒')
        .width(200)
        .height(60)
        .margin(10)
        .onClick(() => {
          this.cancelReminder();
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

上面是我关于代理提醒的代码,当我允许通知后,点击设置10秒提醒的按钮报错:发布失败: 67108878 - Inner error.点击取消提醒按钮也报错:取消失败: 1700003 - BussinessError 1700003: The reminder not exist.为啥呢


更多关于HarmonyOS鸿蒙Next中做一个计时工具设置代理提醒时候出现问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

以下是我的建议:如有用,望点击采纳

缺少必要的权限申请:

  • 您的代码中缺少了 ohos.permission.PUBLISH_AGENT_REMINDER 权限声明
  • 这是使用代理提醒功能的必须权限

代理提醒配置不完整:

  • 您的 targetReminderAgent 配置中缺少了 maxScreenWantAgent 字段
  • 这是代理提醒必须的配置项

要解决这些问题,您需要:

module.json5 中添加权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.PUBLISH_AGENT_REMINDER"
      }
    ]
  }
}

修改您的提醒配置:

private targetReminderAgent: reminderAgentManager.ReminderRequestTimer = {
  reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_TIMER,
  triggerTimeInSeconds: 10,
  actionButton: [
    {
      title: '关闭',
      type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
    }
  ],
  wantAgent: {
    pkgName: 'com.example.myapplication',
    abilityName: 'EntryAbility'
  },
  maxScreenWantAgent: {
    pkgName: 'com.example.myapplication', 
    abilityName: 'EntryAbility'
  },
  title: '定时提醒',
  content: '您设置的10秒倒计时已到!',
  expiredContent: '提醒已过期',
  notificationId: REMINDER_ID,
  slotType: notificationManager.SlotType.SOCIAL_COMMUNICATION
};

更多关于HarmonyOS鸿蒙Next中做一个计时工具设置代理提醒时候出现问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中开发计时工具时,设置代理提醒出现问题的可能原因包括:代理未正确初始化、代理方法未实现或调用时机不当。建议检查代理类是否遵循鸿蒙的代理模式规范,确保代理方法被正确重写,并在适当的地方调用。同时,确认权限设置是否允许应用发送提醒。调试时,可以使用日志输出代理方法的执行情况,以便定位问题。

回到顶部