2017-04-27 117 views
0

我在Marshmellow設備中使用以下代碼以事件編程方式將事件添加到日曆,但它不起作用。任何想法?我無法在日曆應用中看到此事件。以編程方式將事件添加到日曆

 long startMillis = 0; 
     long endMillis = 0; 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     Date startDate = null, endDate = null; 
     try{ 
      startDate = simpleDateFormat.parse("2017-05-01 01:30:00"); 
      startMillis = startDate.getTime(); 
      endDate = simpleDateFormat.parse("2017-05-01 03:30:00"); 
      endMillis = endDate.getTime(); 
     }catch (ParseException e){ 
      e.printStackTrace(); 
     } 

     ContentResolver cr = this.getContentResolver(); 
     ContentValues values = new ContentValues(); 
     TimeZone timeZone = TimeZone.getDefault(); 
     values.put(CalendarContract.Events.DTSTART, startMillis); 
     values.put(CalendarContract.Events.DTEND, endMillis); 
     values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID()); 
     values.put(CalendarContract.Events.TITLE, "Hello Title"); 
     values.put(CalendarContract.Events.DESCRIPTION, "Add events to Calendar"); 
     values.put(CalendarContract.Events.CALENDAR_ID, 879); 
     Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values); 

PS:它的工作原理,如果只有一個Gmail帳戶與日曆應用程序同步。

+0

任何錯誤,你越來越?閱讀此[回答](http://stackoverflow.com/questions/34959858/add-event-and-reminder-not-working-in-6-0-mahmahmallow) – Piyush

+0

@Piyush沒有erros。 – Aniruddha

+0

閱讀我分享的鏈接 – Piyush

回答

0

你好日曆ID是879你不能隨意採取。日曆ID必須是從這個URI內容://com.android.calendar/calendars

int calenderId=-1; 
     String calenderEmaillAddress="[email protected]"; 
     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 


     } 
+0

如何從URI獲取calendarid –

+0

檢查我的答案calenderId = cursor.getInt(0); –

0

我也找到這麼多的解決方案最終我得到的解決方案,併成功日曆事件添加日程事件。

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 = "[email protected]"; 
           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(); 
相關問題