使用Android连接到GoogleCalendar

时间:2012-04-23 17:50:47

标签: android authentication httprequest oauth-2.0 google-calendar-api

我目前正在尝试将我的Android应用与GoogleCalendar中的某些日历相关联。

但我对如何验证通话完全感到困惑。 我明白我必须用OAuth2.0

这样做

但是没有明确的例子或教程我可以遵循/理解正确。 我尝试按照以下步骤进行操作:

https://developers.google.com/google-apps/calendar/auth

但我一直对这些基础知识感到困惑。

我的问题是这个。谁能帮助我理解以下步骤并提供一些示例代码?

第1步:请求OAuth2.0令牌。

步骤2:验证OAuth2.0令牌并检索accessToken

步骤3:使用accessToken并实际执行HTTPRequest调用,该调用为我提供了我想要的JSON。

1 个答案:

答案 0 :(得分:0)

您的问题是最新的还是您已经解决了问题?

编辑:

这里有一些基本信息如何实现GoogleCalendar:

1.创建一个类来处理日历:

public class MyCalendar
{
  private static final String   AUTH_TOKEN_TYPE = "cl";
  public static final String KEY = "YOUR_API_KEY";  //You can find below Simple API Access at GoogleApiConsole
  final HttpTransport   transport = AndroidHttp.newCompatibleTransport();
  final JsonFactory factory = new GsonFactory();
  GoogleAccountManager accountManager;
  String name;
  String token;
  public com.google.api.services.calendar.Calendar mycalendar;

  private HttpRequestInitializer initializer = new HttpRequestInitializer() 
  {
     public void initialize(HttpRequest request) throws IOException
     {           
        request.getHeaders().setAuthorization(GoogleHeaders.getGoogleLoginValue(authToken));
     }
  };

  public MyCalendar()
  {
  }
}
  1. 创建一个Calendar对象(我在MyCalendar的构造函数中执行此操作

    mycalendar = com.google.api.services.calendar.Calendar.builder(transport,jsonFactory)
                  .setApplicationName("CHOOSE_A_APPNAME")                      
                  .setHttpRequestInitializer(initializer)
                  .setJsonHttpRequestInitializer(new GoogleKeyInitializer(KEY))
                  .build();
    accountManager = new GoogleAccountManager(TimetableApplication.getInstance().getActivity());
    findGoogleAcc();
    
  2. 初始化程序的初始化方法[;-)]稍后会调用,如果你想访问你的日历。

    2.搜索GoogleAccount是指用户的手机

    void findGoogleAcc()
    {
        Account account = accountManager.getAccountByName(name);
        if(account == null)
        {
            //Handle wrong name, or if user connect more than one accounts to phone
        }
        if(token != null)
        {
            //you already got your token for user's account and these method is not necessary
        }
        accountManager.getAccountManager().getAuthToken(account, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>() {
    
            public void run(AccountManagerFuture<Bundle> future)
            {
                try
                {
                    Bundle bundle = future.getResult();
                    if(bundle.containsKey(AccountManager.KEY_INTENT))
                    {
                        // Allow app to connect to googleaccount
                        Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT);
                        intent.setFlags(intent.getFlags() & ~ Intent.FLAG_ACTIVITY_NEW_TASK);
                        activity.startActivityForResult(intent, 0);
                    }
                    else
                        if(bundle.containsKey(AccountManager.KEY_AUTHTOKEN))
                        {
                            this.authToken = authToken;
                            gotSmthFromCalendar();
                        }
                }
                catch(Exception e)
                {
                }
            }
        }, null);
    }
    

    3.在方法:

    上使用您的日历
         void gotSmthFromCalendar()
         {
             //Here u can do whatever u want.
         }
    

    我认为在gotSmthFromCalendar()上你应该使用AsyncTask来重新排列数据。例如,你可以这样做:

       List<CalendarListEntry> calendarList = mycalendar.calendarList().list().execute().getItems();
       for(CalendarListEntry calendarEntry : calendarList)
       {
            String summary = calendarEntry.getSummary();
            String id = calendarEntry.getId();
            Log.v("Calendar","Found a calendar with summary : " + summary + " an id: " + id);
       }
    

    希望这些基础知识可以帮助您使用v3。如果你需要额外的帮助,请每次问我!!

    Kooki