【问题标题】:How to get gmail user's contacts?如何获取gmail用户的联系人?
【发布时间】:2011-07-04 18:34:18
【问题描述】:

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

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

【问题讨论】:

    标签: android api gmail


    【解决方案1】:

    我希望这对像我这样的人有所帮助,因为我为此搜索了很多,最后完成了以下操作。

    我已经为Google Contacts API v3 使用了GData 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获取这些jars

    • 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"/>
    

    【讨论】:

    • 在此代码中,您只能获取输入电子邮件和密码的联系人,不输入密码怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2016-04-07
    相关资源
    最近更新 更多