2017-04-27 6 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-marshmallow) – Piyush

+0

@Piyushエロスはありません。 – Aniruddha

+0

私が共有しているリンクを読む – Piyush

答えて

0

こんにちはCalender IDは879です。あなたはそれをランダムに取ることはできません。最終的に私は解決策を持って、成功したイベントはスケジュールイベントに追加カレンダーにも非常に多くの解決策を見つける

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から円IDを取得する方法 –

+0

私の答えをチェックするcalenderId = cursor.getInt(0); –

0

アムを//com.android.calendar/calendars:カレンダーIDは、このURIのコンテンツからでなければなりません。

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(); 
関連する問題