uniapp使用nativejs原生插入日曆活動(Android)
阿新 • • 發佈:2021-02-11
前言
前言:最近開發中要寫一個類似boss直聘,接受面試之後,自動將面試時間地點等內容儲存到系統日曆中,待時間快到的前30分鐘通過系統日曆發出提醒,提醒面試者去面試這樣一個功能。
使用步驟
1.選擇許可權
在manifest.json中的App許可權模組勾選對日曆操作的讀寫許可權
2.程式碼
<template>
<view class="content">
<image class="logo" src="/static/logo.png">< /image>
<view class="text-area">
<button @tap="click">日曆插入事件</button>
</view>
</view>
</template>
<script>
var calanderURL = "content://com.android.calendar/calendars";
var calanderEventURL = "content://com.android.calendar/events" ;
var calanderRemiderURL = "content://com.android.calendar/reminders";
var calId;
export default {
methods: {
click(){
uni.getSystemInfo({
success: res => {
if (res.platform === 'android') {
this.addEvent()
}
}
})
}
addEvent() {
var Cursor = plus.android.importClass("android.database.Cursor");
var Uri = plus.android.importClass("android.net.Uri");
var Calendar = plus.android.importClass("java.util.Calendar");
var main = plus.android.runtimeMainActivity();
var userCursor = plus.android.invoke(main.getContentResolver(), "query", Uri.parse(calanderURL), null, null, null, null);
//判斷是否有賬戶
if (plus.android.invoke(userCursor, "getCount") <= 0) {
this.initCalendars();
} else {
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);
console.log(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);
}
},
//新增賬戶
initCalendars() {
var TimeZone=plus.android.importClass("java.util.TimeZone");
console.log(TimeZone)
var timeZone = TimeZone.getDefault();
console.log(timeZone)
var ContentValues=plus.android.importClass("android.content.ContentValues");
console.log(ContentValues)
var value = new ContentValues();
var Calendars=plus.android.importClass("android.provider.CalendarContract.Calendars");
console.log(Calendars)
value.put("name", "名稱");
// 賬戶名稱
value.put("account_name", "賬戶名稱");
// 賬戶型別
value.put("account_type", "com.android.exchange");
// 顯示的賬戶名稱
value.put("calendar_displayName", "顯示的賬戶名稱");
value.put("visible", 1);
value.put("calendar_color", -9206951);
value.put("calendar_access_level","700");
value.put("sync_events", 1);
value.put("calendar_timezone",plus.android.invoke(timeZone, "getID"));
// 賬戶擁有者
value.put("ownerAccount","賬戶擁有者");
value.put("canOrganizerRespond", 0);
console.log(value)
var Uri=plus.android.importClass("android.net.Uri");
var calendarUri=Uri.parse("content://com.android.calendar/calendars");
var buildUpon = plus.android.invoke(calendarUri, "buildUpon");
var CalendarContract = plus.android.importClass("android.provider.CalendarContract");
plus.android.invoke(buildUpon, "appendQueryParameter", CalendarContract.CALLER_IS_SYNCADAPTER, "true");
plus.android.invoke(buildUpon, "appendQueryParameter", "account_name", "賬戶名稱");
plus.android.invoke(buildUpon, "appendQueryParameter", "account_type", "com.android.exchange");
calendarUri = plus.android.invoke(buildUpon, "build");
plus.android.invoke(plus.android.runtimeMainActivity().getContentResolver(), "insert", calendarUri, value);
}
}
}
</script>
總結
1,當然你也可以將這個原生的封裝後在你需要的地方呼叫就可以了。
2,app必須開啟許可權才能讀寫成功.
**
附:一個ios的外掛:在iOS系統中新增刪除日曆外掛地址
**