【安卓开发 】Android初级开发(十二)Android向系统日历中添加事件
生活随笔
收集整理的這篇文章主要介紹了
【安卓开发 】Android初级开发(十二)Android向系统日历中添加事件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.首先需要獲取權限
<uses-permission android:name="android.permission.READ_CALENDAR" /><uses-permission android:name="android.permission.WRITE_CALENDAR" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />主界面中直接調用獲取所有的權限
private void checkPermission() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//將需要的權限都放在里面String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_CALENDAR,Manifest.permission.READ_CALENDAR};PermissionsUtils.getInstance().chekPermissions(this, permissions, permissionsResult);}}PermissionsUtils.IPermissionsResult permissionsResult = new PermissionsUtils.IPermissionsResult() {@Overridepublic void passPermissons() {selectCalendarInfo();}@Overridepublic void forbitPermissons() {finish();}};private void selectCalendarInfo() {}?
2.自定義權限工具類
package com.peace.love.carpo_test.tool;import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.util.Log;import java.util.ArrayList; import java.util.List;/*** 權限工具類*/public class PermissionsUtils {private final int mRequestCode = 100;//權限請求碼public static boolean showSystemSetting = true;private PermissionsUtils() {}private static com.peace.love.carpo_test.tool.PermissionsUtils permissionsUtils;private IPermissionsResult mPermissionsResult;public static com.peace.love.carpo_test.tool.PermissionsUtils getInstance() {if (permissionsUtils == null) {permissionsUtils = new com.peace.love.carpo_test.tool.PermissionsUtils();}return permissionsUtils;}public void chekPermissions(AppCompatActivity context, String[] permissions, @NonNull IPermissionsResult permissionsResult) {mPermissionsResult = permissionsResult;if (Build.VERSION.SDK_INT < 23) {//6.0才用動態權限permissionsResult.passPermissons();return;}//創建一個mPermissionList,逐個判斷哪些權限未授予,未授予的權限存儲到mPerrrmissionList中List<String> mPermissionList = new ArrayList<>();//逐個判斷你要的權限是否已經通過for (int i = 0; i < permissions.length; i++) {if (ContextCompat.checkSelfPermission(context, permissions[i]) != PackageManager.PERMISSION_GRANTED) {mPermissionList.add(permissions[i]);//添加還未授予的權限}}//申請權限if (mPermissionList.size() > 0) {//有權限沒有通過,需要申請Log.d("有個別權限沒有通過","OK");ActivityCompat.requestPermissions(context, permissions, mRequestCode);} else {//說明權限都已經通過,可以做你想做的事情去Log.d("權限全部通過","OK");permissionsResult.passPermissons();return;}}//請求權限后回調的方法//參數: requestCode 是我們自己定義的權限請求碼//參數: permissions 是我們請求的權限名稱數組//參數: grantResults 是我們在彈出頁面后是否允許權限的標識數組,數組的長度對應的是權限名稱數組的長度,數組的數據0表示允許權限,-1表示我們點擊了禁止權限public void onRequestPermissionsResult(AppCompatActivity context, int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) {boolean hasPermissionDismiss = false;//有權限沒有通過if (mRequestCode == requestCode) {for (int i = 0; i < grantResults.length; i++) {if (grantResults[i] == -1) {hasPermissionDismiss = true;}}//如果有權限沒有被允許if (hasPermissionDismiss) {if (showSystemSetting) {showSystemPermissionsSettingDialog(context);//跳轉到系統設置權限頁面,或者直接關閉頁面,不讓他繼續訪問} else {mPermissionsResult.forbitPermissons();}} else {//全部權限通過,可以進行下一步操作。。。mPermissionsResult.passPermissons();}}}/*** 不再提示權限時的展示對話框*/AlertDialog mPermissionDialog;private void showSystemPermissionsSettingDialog(final AppCompatActivity context) {final String mPackName = context.getPackageName();if (mPermissionDialog == null) {mPermissionDialog = new AlertDialog.Builder(context).setMessage("已禁用權限,請手動授予").setPositiveButton("設置", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {cancelPermissionDialog();Uri packageURI = Uri.parse("package:" + mPackName);Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);context.startActivity(intent);context.finish();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//關閉頁面或者做其他操作cancelPermissionDialog();//mContext.finish();mPermissionsResult.forbitPermissons();}}).create();}mPermissionDialog.show();}//關閉對話框private void cancelPermissionDialog() {if (mPermissionDialog != null) {mPermissionDialog.cancel();mPermissionDialog = null;}}public interface IPermissionsResult {void passPermissons();void forbitPermissons();}}3.Activity業務代碼
?
private void initUrl() {if (Integer.parseInt(Build.VERSION.SDK) >= 8) {CALANDER_EVENT_URL = "content://com.android.calendar/events";} else {CALANDER_EVENT_URL = "content://calendar/events";}}private void addCalender(String title ,long s ,long e) {Log.d("進入創建日程接口","OK");Log.d("日歷開始時間",String.valueOf(s));Log.d("日歷結束時間",String.valueOf(e));//獲取要出入的gmail賬戶的idString calId = "1";Cursor userCursor = getContentResolver().query(Uri.parse(CALANDER_EVENT_URL), null,null, null, null);if (null != userCursor && userCursor.getCount() > 0) {userCursor.moveToFirst();calId = userCursor.getString(userCursor.getColumnIndex(CalendarContract.Events.CALENDAR_ID)); //Events._ID // Log.i(TAG, "calID: " + calId);}ContentValues event = new ContentValues();//標題Log.d("日歷會議標題",title);event.put("title", title);//內容 // event.put("description", "一個產品能獲得成功,是因為它真正幫人們解決了某個問題。這聽上去過于基礎,但這的的確確是打造一個好產品最為重要的因素。");//插入到賬戶event.put("calendar_id", calId);//開始時間Calendar mCalendar = Calendar.getInstance();mCalendar.set(Calendar.HOUR_OF_DAY, 15);long start = mCalendar.getTime().getTime();//截止時間,如果需要設置一周或者一個月可以改截止日期即可mCalendar.set(Calendar.HOUR_OF_DAY, 16);long end = mCalendar.getTime().getTime();Log.d("日歷開始時間",String.valueOf(start));Log.d("日歷結束時間",String.valueOf(end));//起始時間event.put(CalendarContract.Events.DTSTART,s * 1000);//截止時間event.put(CalendarContract.Events.DTEND, e * 1000);//控制是否事件觸發報警,提醒如下event.put(CalendarContract.Events.HAS_ALARM, 1);//設置時區,否則會報錯event.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());//設置一個全天事件的條目//event.put("allDay", 1); // 0 for false, 1 for true//設置地理位置//event.put(CalendarContract.Events.EVENT_LOCATION, "Event Location");Uri newEvent = getContentResolver().insert(Uri.parse(CALANDER_EVENT_URL), event);long id = Long.parseLong(newEvent.getLastPathSegment()); // Log.i(TAG, "id: " + id);ContentValues values = new ContentValues();values.put("event_id", id);//提前10分鐘有提醒values.put(CalendarContract.Reminders.MINUTES, 10);values.put(CalendarContract.Reminders.EVENT_ID, id);values.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT);ContentResolver cr1 = getContentResolver(); // 為剛才新添加的event添加reminder//這里在6.0中檢查下權限信息if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) {return;}cr1.insert(CalendarContract.Reminders.CONTENT_URI, values); // 調用這個方法返回值是一個UriToast.makeText(this, "該會議已加入日歷行程", Toast.LENGTH_LONG).show();}?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【安卓开发 】Android初级开发(十二)Android向系统日历中添加事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【人工智能初级系列(一)】科学计算库 N
- 下一篇: android gridview控件使用