1. 程式人生 > 其它 >uniapp使用nativejs原生插入日曆活動(Android)

uniapp使用nativejs原生插入日曆活動(Android)

技術標籤:uni-appandroid

前言

前言:最近開發中要寫一個類似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系統中新增刪除日曆外掛地址

**