android - 如何获取gmail用户的联系人?

标签 android api gmail

我需要检索用户存储在其 gmail 帐户中的电子邮件地址。在我的应用程序中,用户现在可以决定邀请他的 friend 。我希望应用程序(如果用户告诉我“确定”)显示存储在 gmail 中的用户联系人电子邮件地址列表,他可以从中选择一个或多个...

我知道存在Authentication and Authorization for Google APIs" .这是正确的方法吗?以及如何在 Android 中使用它们?

最佳答案

我希望这对像我这样的人有帮助,因为我已经搜索了很多,最后完成了下面的内容。

我用过GData Google Contacts API v3 的 Java 客户端库.

package com.example.cand;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;

import com.google.gdata.client.Query;
import com.google.gdata.client.Service;
import com.google.gdata.client.contacts.ContactsService;
import com.google.gdata.data.Link;
import com.google.gdata.data.contacts.ContactEntry;
import com.google.gdata.data.contacts.ContactFeed;
import com.google.gdata.util.AuthenticationException;
import com.google.gdata.util.NoLongerAvailableException;
import com.google.gdata.util.ServiceException;

public class MainActivity extends Activity {
    private URL feedUrl;
    private static final String username="yourUsername";
    private static final String pwd="yourPassword";
    private ContactsService service;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String url = "https://www.google.com/m8/feeds/contacts/default/full";

        try {
            this.feedUrl = new URL(url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        new GetTask().execute();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private class GetTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... params) {
            service = new ContactsService("ContactsSample");
            try {
                service.setUserCredentials(username, pwd);
            } catch (AuthenticationException e) {
                e.printStackTrace();
            }
            try {
                queryEntries(); 
            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

    }

    private void queryEntries() throws IOException, ServiceException{
        Query myQuery = new Query(feedUrl);
        myQuery.setMaxResults(50);
        myQuery.setStartIndex(1);
        myQuery.setStringCustomParameter("showdeleted", "false");
        myQuery.setStringCustomParameter("requirealldeleted", "false");
//      myQuery.setStringCustomParameter("sortorder", "ascending");
//      myQuery.setStringCustomParameter("orderby", "");


        try{
            ContactFeed resultFeed = (ContactFeed)this.service.query(myQuery, ContactFeed.class);
                for (ContactEntry entry : resultFeed.getEntries()) {
                    printContact(entry);
                }
                System.err.println("Total: " + resultFeed.getEntries().size() + " entries found");

        }
        catch (NoLongerAvailableException ex) {
            System.err.println("Not all placehorders of deleted entries are available");
        }

    }
    private void printContact(ContactEntry contact) throws IOException, ServiceException{
        System.err.println("Id: " + contact.getId());
        if (contact.getTitle() != null)
            System.err.println("Contact name: " + contact.getTitle().getPlainText());
        else {
            System.err.println("Contact has no name");
        }

        System.err.println("Last updated: " + contact.getUpdated().toUiString());
        if (contact.hasDeleted()) {
            System.err.println("Deleted:");
        }

        //      ElementHelper.printContact(System.err, contact);

        Link photoLink = contact.getLink("http://schemas.google.com/contacts/2008/rel#photo", "image/*");
        if (photoLink.getEtag() != null) {
          Service.GDataRequest request = service.createLinkQueryRequest(photoLink);

          request.execute();
          InputStream in = request.getResponseStream();
          ByteArrayOutputStream out = new ByteArrayOutputStream();
          RandomAccessFile file = new RandomAccessFile("/tmp/" + contact.getSelfLink().getHref().substring(contact.getSelfLink().getHref().lastIndexOf('/') + 1), "rw");

          byte[] buffer = new byte[4096];
          for (int read = 0; (read = in.read(buffer)) != -1; )
            out.write(buffer, 0, read);
          file.write(out.toByteArray());
          file.close();
          in.close();
          request.end();
        }

        System.err.println("Photo link: " + photoLink.getHref());
        String photoEtag = photoLink.getEtag();
        System.err.println("  Photo ETag: " + (photoEtag != null ? photoEtag : "(No contact photo uploaded)"));

        System.err.println("Self link: " + contact.getSelfLink().getHref());
        System.err.println("Edit link: " + contact.getEditLink().getHref());
        System.err.println("ETag: " + contact.getEtag());
        System.err.println("-------------------------------------------\n");
    }

}


所需的库文件:您可以从here 获取这些jar。

  • gdata-client-1.0.jar
  • gdata-client-meta-1.0.jar
  • gdata-contacts-3.0.jar
  • gdata-contacts-meta-3.0.jar
  • gdata-core-1.0.jar
  • guava-11.0.2.jar

注意:在AndroidManifest文件中添加上网权限。

<uses-permission android:name="android.permission.INTERNET"/>

关于android - 如何获取gmail用户的联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5125500/

相关文章:

android - 如何将 apk 文件传输到另一台设备

android - 如何使用设备键盘

java - Google Cloud Storage - 如何授权?

java - 如何知道 Java 类何时被引入标准 Java API?

api - 在 gmail api 中搜索特定的回复 header

android - RxJava onError 无法在未调用 Looper.prepare() 的线程内创建处理程序

java - 在 shell 中执行时 JUnit 测试的 ComparisonFailure

sql-server - 使用GORM从GOlang中的SQL处理多个结果集

gmail - 如何在独立程序中自动从用户检索 OAuth 代码

email - 如何从我的 Gmail 帐户接收推送通知?