以编程方式将事件添加到日历

时间:2017-04-27 13:05:09

标签: android calendar google-calendar-api

我在Marshmellow设备中使用以下代码以编程方式将事件添加到日历中,但它无法正常工作。任何的想法?我无法在日历应用中看到此事件。

  // This acts as both the length of bytes to be encoded (on input) and the
  // number of bytes used in the resulting encrypted data (on output).
  DWORD length = kAesBytes128;
  if (!CryptEncrypt(hKey,
                    NULL,  // hHash = no hash
                    true,  // Final
                    0,     // dwFlags
                    reinterpret_cast<BYTE*>(encrypted->data()),
                    &length,
                    encrypted->length())) {
    throw std::runtime_error("Encryption failed");
  }

  // See comment above.
  encrypted->chop(length - kAesBytes128);

PS:如果只有一个Gmail帐户与日历应用同步,则可以使用。

2 个答案:

答案 0 :(得分:1)

我也找到了这么多解决方案,最后我得到了解决方案并成功添加了日程事件日程事件。

 Step -1 > Enable Google calnedar API From google console.
 Step - 2 > Add the permission in Androidmanifest.xml 

           <uses-permission android:name="android.permission.WRITE_CALENDAR"/> 

 Step =3 > Add library for checking Permissions in your  .gradle

          compile 'com.karumi:dexter:4.1.0'




    Dexter.withActivity(YoutActivityName.this)
                    .withPermission(Manifest.permission.WRITE_CALENDAR)
                    .withListener(new PermissionListener() 
                    {
                        @Override
                        public void onPermissionGranted(PermissionGrantedResponse response) {
                            try {

                                int calenderId = -1;
                                String calenderEmaillAddress = "sathishmicit2012@gmail.com";
                                String[] projection = new String[]{
                                        CalendarContract.Calendars._ID,
                                        CalendarContract.Calendars.ACCOUNT_NAME};
                                ContentResolver cr = context.getContentResolver();
                                Cursor cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"), projection,
                                        CalendarContract.Calendars.ACCOUNT_NAME + "=? and (" +
                                                CalendarContract.Calendars.NAME + "=? or " +
                                                CalendarContract.Calendars.CALENDAR_DISPLAY_NAME + "=?)",
                                        new String[]{calenderEmaillAddress, calenderEmaillAddress,
                                                calenderEmaillAddress}, null);

                                if (cursor.moveToFirst()) {

                                    if (cursor.getString(1).equals(calenderEmaillAddress)) {

                                        calenderId = cursor.getInt(0);
                                    }
                                }


                                long start2 = Calendar.getInstance().getTimeInMillis(); // 2011-02-12 12h00
                                long end2 = Calendar.getInstance().getTimeInMillis() + (4 * 60 * 60 * 1000);   // 2011-02-12 13h00

                                String title = "This is my demo test with alaram with 5 minutes";

                                ContentValues cvEvent = new ContentValues();
                                cvEvent.put("calendar_id", calenderId);
                                cvEvent.put(CalendarContract.Events.TITLE, title);

                                cvEvent.put(CalendarContract.Events.DESCRIPTION, String.valueOf(start2));
                                cvEvent.put(CalendarContract.Events.EVENT_LOCATION, "Bhatar,Surat");
                                cvEvent.put("dtstart", start2);
                                cvEvent.put("hasAlarm", 1);
                                cvEvent.put("dtend", end2);

                                cvEvent.put("eventTimezone", TimeZone.getDefault().getID());


                                Uri uri = getContentResolver().insert(Uri.parse("content://com.android.calendar/events"), cvEvent);


     // get the event ID that is the last element in the Uri  

                                long eventID = Long.parseLong(uri.getLastPathSegment());


                                ContentValues values = new ContentValues();

                                values.put(CalendarContract.Reminders.MINUTES, 2);
                                values.put(CalendarContract.Reminders.EVENT_ID, eventID);
                                values.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALARM);
                                cr.insert(CalendarContract.Reminders.CONTENT_URI, values);
                                //Uri uri = cr.insert(CalendarContract.Reminders.CONTENT_URI, values);


                            } catch (Exception e) {
                                e.printStackTrace();
                            }


                        }

                        @Override
                        public void onPermissionDenied(PermissionDeniedResponse response) {/* ... */}

                        @Override
                        public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {/* ... */}
                    }).check();

答案 1 :(得分:0)

Hello Calender ID是879你不能随意。日历ID必须来自此URI内容://com.android.calendar/calendars

int calenderId=-1;
        String calenderEmaillAddress="xxx@gmail.com";
        String[] projection = new String[]{
                CalendarContract.Calendars._ID,
                CalendarContract.Calendars.ACCOUNT_NAME};
        ContentResolver cr = activity.getContentResolver();
        Cursor cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"), projection,
                CalendarContract.Calendars.ACCOUNT_NAME + "=? and (" +
                        CalendarContract.Calendars.NAME + "=? or " +
                        CalendarContract.Calendars.CALENDAR_DISPLAY_NAME + "=?)",
                new String[]{calenderEmaillAddress, calenderEmaillAddress,
                        calenderEmaillAddress}, null);

        if (cursor.moveToFirst()) {

            if (cursor.getString(1).equals(calenderEmaillAddress))
                 calenderId=cursor.getInt(0); //youre calender id to be insered in above your code


        }