使用GoogleAuthUtil导入Gmail联系人

时间:2013-05-04 13:10:37

标签: android google-oauth google-play-services

我正在尝试在我的Android应用中添加来自gmail帐户功能的导入联系人。所以第一个问题是从gmail获取访问令牌。我发现有GoogleAuthUtil课可以帮助我。
这是我的代码:

private void importContactsFromGmail() {
    showProgressDialog();
    GetTokenTask getTokenTask = new GetTokenTask();
    getTokenTask.execute();
    String token = "";
    try {
        token = getTokenTask.get();
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(token);
    hideProgressDialog();
}

private class GetTokenTask extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {
        String token = "";
        try {
            token = GoogleAuthUtil.getToken(activity, <My_gmail_account>, "https://www.google.com/m8/feeds/");
        } catch (Exception e) {
            e.printStackTrace();  
        }
        return token;
    }
}

现在调用GoogleAuthUtil.getToken之后,我的应用程序完全冻结(Logcat中没有错误)。我完全陷入困境,我需要你的帮助。
我的代码出了什么问题?也许我应该以其他方式导入联系人?

2 个答案:

答案 0 :(得分:1)

不确定这是否相关但是在主线程上调用.get()方法不正确,因为是阻塞方法。

如果以这种方式使用AsyncTask该怎么办?

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new GetTokenTask().execute();
    }

    static class GetTokenTask  extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... unused) {
            String token = "";
            try {
                token = GoogleAuthUtil.getToken(activity, <My_gmail_account>, "https://www.google.com/m8/feeds/");
            } catch (Exception e) {
                e.printStackTrace();  
            }

            return token;
        }

        @Override
        protected void onPostExecute(String token) {
            Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show();
        }
    }

}

(我写的没有编译,也许需要调整)

答案 1 :(得分:0)

在Android设备上,Gmail联系人会在本地同步到设备上,并通过公开Contacts Provider提供,因此您无需使用Google API来提取已有的内容。整个training series专门用于检索联系人列表。

请注意,联系人培训系列确实假设您已经了解内容提供商,因此阅读the basics of Content Providers也可能会有所帮助。