Android-Inhaltsanbieter für Gmail

Die Gmail App für Android enthält ein Contentanbieter mit denen Drittanbieter-Entwickler Labelinformationen wie Name und Anzahl ungelesener E-Mails angezeigt. Sie werden aktualisiert, wenn sich diese Informationen ändern. Beispiel: Eine App oder Widget könnten die Anzahl der ungelesenen Nachrichten im Posteingang eines bestimmten Kontos anzeigen.

Rufen Sie vor der Verwendung dieses Contentanbieters den GmailContract.canReadLabels(Context) , um festzustellen, ob die Gmail App des Nutzers diese Funktionen unterstützt. Abfragen.

Gültiges Gmail-Konto für die Abfrage suchen

Eine App muss zuerst die E-Mail-Adresse eines gültigen Gmail-Kontos finden, das abgefragt werden soll. und Labelinformationen. Mit der GET_ACCOUNTS Berechtigung, die AccountManager folgende Informationen zurückgeben:

// Get the account list, and pick the first one
final String ACCOUNT_TYPE_GOOGLE = "com.google";
final String[] FEATURES_MAIL = {
        "service_mail"
};
AccountManager.get(this).getAccountsByTypeAndFeatures(ACCOUNT_TYPE_GOOGLE, FEATURES_MAIL,
        new AccountManagerCallback() {
            @Override
            public void run(AccountManagerFuture future) {
                Account[] accounts = null;
                try {
                    accounts = future.getResult();
                    if (accounts != null && accounts.length > 0) {
                        String selectedAccount = accounts[0].name;
                        queryLabels(selectedAccount);
                    }

                } catch (OperationCanceledException oce) {
                    // TODO: handle exception
                } catch (IOException ioe) {
                    // TODO: handle exception
                } catch (AuthenticatorException ae) {
                    // TODO: handle exception
                }
            }
        }, null /* handler */);

Contentanbieter abfragen

Nachdem Sie eine E-Mail-Adresse ausgewählt haben, erhalten Sie ContentProvider URI, die abgefragt werden soll. Wir haben eine einfache Klasse namens GmailContract.java um den URI zu erstellen und die zurückgegebenen Spalten zu definieren.

Eine App kann diesen URI direkt abfragen. Alternativ können Sie auch einen CursorLoader –, um einen Cursor mit Informationen zu allen Labels in einem Konto zu erhalten:

Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);

Wenn sich die Daten in diesem Cursor befinden, können Sie den URI-Wert dauerhaft im GmailContract.Labels.URI-Spalte zum Abfragen und Überwachen auf Änderungen an einem einzelnes Label.

Der Wert NAME für vordefinierte Labels kann je nach Sprache variieren. GmailContract.Labels.NAME verwenden. Stattdessen können Sie vordefinierte Labels wie „Posteingang“, „Gesendet“ oder „Entwürfe“ mithilfe des String-Werts in der Spalte GmailContract.Labels.CANONICAL_NAME:

// loop through the cursor and find the Inbox
if (labelsCursor != null) {
    final String inboxCanonicalName = GmailContract.Labels.LabelCanonicalName.CANONICAL_NAME_INBOX;
    final int canonicalNameIndex = labelsCursor.getColumnIndexOrThrow(GmailContract.Labels.CANONICAL_NAME);
    while (labelsCursor.moveToNext()) {
        if (inboxCanonicalName.equals(labelsCursor.getString(canonicalNameIndex))) {
            // this row corresponds to the Inbox
        }
    }
}

Weitere Informationen findest du unter Grundlagen des Contentanbieters

Beispiel ansehen

Ein Beispiel für diesen Contentanbieter Beispiel-App herunterladen