6 Stimmen

Wie bekomme ich die Kontakte eines Google Mail-Benutzers?

Ich muss die E-Mail-Adressen abrufen, die der Benutzer in seinem Google Mail-Konto gespeichert hat. In meiner App kann der Benutzer nun entscheiden, einen Freund von ihm einzuladen. Ich möchte, dass die Anwendung (wenn der Benutzer mir sagen, "ok") präsentiert eine Liste der Kontakte des Benutzers E-Mail-Adressen in Google Mail gespeichert, unter denen er eine oder mehrere auswählen kann...

Ich weiß, dass es das gibt Authentifizierung und Autorisierung für Google APIs" . Ist das der richtige Weg? Und wie kann man sie in Android verwenden?

3voto

Noundla Sandeep Punkte 3304

Ich hoffe, dass dies jemandem wie mir helfen wird, denn ich habe lange danach gesucht und bin schließlich mit dem Folgenden fertig geworden.

Ich habe verwendet GData java client bibliothek für Google Kontakte API v3 .

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");
    }

}

Erforderliche Bibliotheksdateien: Sie können diese Jars von aquí

  • 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

Hinweis: Fügen Sie die Internetberechtigung in der Datei AndroidManifest hinzu.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X