从用户谷歌日历获取事件的最佳做法是什么



我想从用户的谷歌日历中读取事件,并在Android应用程序中使用事件的标题以备将来使用。

到目前为止,我已经阅读了有关google日历api和日历提供程序等的文档,但无法运行任何"入门"指南。我也找不到任何关于如何实现 API 的有用示例。

我知道这个过程(用户需要使用他的谷歌帐户进行身份验证,并且使用该信息可以访问所需的内容(,但正如我所说,我不知道如何在 android 应用程序中实现这一点。

如果有人有有用的代码,示例或任何建议,我将不胜感激,因为这个简单的主题让我发疯。

使用内容提供程序,您可以访问日历事件,内容解析程序 query(( 方法用于获取内容提供程序数据。您需要传递需要检索的列的列表。

您可以从Android日历文档中获取参考,请查看下面的链接 https://developer.android.com/reference/java/util/Calendar

  // add below permission in your manifest file and ask these permission at run time also
   <uses-permission android:name="android.permission.WRITE_CALENDAR"></uses-permission>
   <uses-permission android:name="android.permission.READ_CALENDAR"></uses-permission>

  public void getDataFromEventsTable() {
    Cursor cur = null;
    ContentResolver cr =getContentResolver();
    //if you want access calendar details use below uri
   // Uri uri = CalendarContract.Calendars.CONTENT_URI;
    String[] calmProjection ={CalendarContract.Calendars._ID,
                    CalendarContract.Calendars.ACCOUNT_NAME,
                    CalendarContract.Calendars.ACCOUNT_TYPE,
                    CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
                    CalendarContract.Calendars.CALENDAR_COLOR,
                    CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL,
                    CalendarContract.Calendars.OWNER_ACCOUNT,
                    CalendarContract.Calendars.CALENDAR_TIME_ZONE,
                    CalendarContract.Calendars.ALLOWED_REMINDERS};
    //if your want access event related info use below uri
    Uri uri=CalendarContract.Events.CONTENT_URI;
    String[] eventmProjection =
            {CalendarContract.Calendars._ID,
                    CalendarContract.Events.DTSTART,
                    CalendarContract.Events.DTEND,
                    CalendarContract.Events.TITLE,
                    CalendarContract.Events.EVENT_LOCATION,
                    CalendarContract.Events.ORGANIZER,
                    CalendarContract.Events._ID,
                    CalendarContract.Events.DESCRIPTION,
                    CalendarContract.Events.DURATION,
                    CalendarContract.Events.SYNC_DATA1,
                    CalendarContract.Events.DIRTY,
                    CalendarContract.Events.UID_2445,
                    CalendarContract.Events.DELETED,
                    CalendarContract.Events.LAST_DATE,
                    CalendarContract.Events.SYNC_DATA2,
                    CalendarContract.Events.ALL_DAY,
                    CalendarContract.Events.RRULE,
                    CalendarContract.Events.STATUS,
                    CalendarContract.Events.RDATE
            };
    String selection = "((" + CalendarContract.Calendars.ACCOUNT_NAME + " = ?) AND ("
            + CalendarContract.Calendars.ACCOUNT_TYPE + " = ?) AND ("
            + CalendarContract.Calendars.OWNER_ACCOUNT + " = ?))";
  // pass here details of account, which account linked with your google calendar 
 String[] selectionArgs = new String[]{"xyz@gmail.com", "com.google",
            "xyz@gmail.com"};
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALENDAR},12);
    }
    cur = cr.query(uri, eventmProjection, selection, selectionArgs, null);
       if(cur.getCount()>0){
        while (cur.moveToNext()) {
            String eventTitle = cur.getString(cur.getColumnIndex(CalendarContract.Events.TITLE));
            String eventId = cur.getString(cur.getColumnIndex(CalendarContract.Events._ID));
            String startDate = cur.getString(cur.getColumnIndex(CalendarContract.Events.DTSTART));
            String endDate = cur.getString(cur.getColumnIndex(CalendarContract.Events.DTEND));
            Log.d("Events", "->" + eventTitle + "->" + eventId + "->" + startDate + "->" + endDate);
        }
        }
}

相关内容

最新更新