uniapp 项目要求接手机日历,获取日历授权,DCloud插件市场  App权限判断和提示  地址:

App权限判断和提示 - DCloud 插件市场 App平台https://ext.dcloud.net.cn/plugin?id=594根据上面的步骤 按需引入即可,在此不做过多说明。

页面上 app 启动就调授权,在App.vue 里:

  onShow: function() {
      // #ifdef APP-PLUS
      let that = this;
      that.requestAndroidPermission('android.permission.READ_CALENDAR');   // 读取日历
      that.requestAndroidPermission('android.permission.WRITE_CALENDAR');  // 写入日历
      // #endif
    },

   methods:{
        // 网址的代码 copy 
      async requestAndroidPermission(permisionID) {
          var result = await permision.requestAndroidPermission(permisionID)
          var strStatus
          if (result == 1) {
              strStatus = "已获得授权"
          } else if (result == 0) {
              strStatus = "未获得授权"
          } else {
              strStatus = "被永久拒绝权限"
          }
          // uni.showModal({
          //     content: permisionID + strStatus,
          //     showCancel: false
          // });
      },
    },

在 要把数据写入日历的页面里:

<script>
  var calanderURL = "content://com.android.calendar/calendars";
  var calanderEventURL = "content://com.android.calendar/events";
  var calanderRemiderURL = "content://com.android.calendar/reminders";
  var calId;
methods:{
// 获取手机平台
      getplatform() {
        uni.getSystemInfo({
          success: res => {
            if (res.platform === 'android') {
              this.addEvent()
            }
          }
        })
      },
      addEvent() {
        let that = this;
        var Uri = plus.android.importClass("android.net.Uri");
        var main = plus.android.runtimeMainActivity();
        var userCursor = plus.android.invoke(main.getContentResolver(), "query", Uri.parse(calanderURL), null, null,
          null, null);
        plus.android.invoke(userCursor, "moveToLast");
        calId = plus.android.invoke(userCursor, "getString", plus.android.invoke(userCursor, "getColumnIndex", "_id"));
        var ContentValues = plus.android.importClass("android.content.ContentValues");
        var events = new ContentValues();
        events.put("title", "标题");
        events.put("description", "内容");
        // 插入账户  
        events.put("calendar_id", calId);
        //位置  可不填
        // events.put("eventLocation", "位置");
        events.put("dtstart", "开始时间"); //时间戳 到毫秒的时间戳
        events.put("dtend", "结束时间"); //时间戳 到毫秒的时间戳
        events.put("hasAlarm", 1);
        events.put("eventTimezone", "Asia/Shanghai"); // 这个是时区,必须有,这个就是中国标准时区,在中国境内的不必再改  
        // 添加事件    
        var newEvent = plus.android.invoke(plus.android.runtimeMainActivity().getContentResolver(), "insert", Uri.parse(
          calanderEventURL), events);
        // 事件提醒的设定  
        var id = plus.android.invoke(newEvent, "getLastPathSegment");
        var values = new ContentValues();
        values.put("event_id", id);
        // 提前30分钟有提醒  
        values.put("minutes", "30");
        values.put("method", "1");
        plus.android.invoke(main.getContentResolver(), "insert", Uri.parse(calanderRemiderURL), values);
      },
}

 </script> 

在 manifest.json   app 权限里,要勾选上这两个权限,就可以了。

Logo

前往低代码交流专区

更多推荐