Die Android Gmail App enthält einen Contentanbieter mit dem Drittanbieter-Entwickler Labelinformationen wie Name und Anzahl der ungelesenen Nachrichten abrufen und sich über Änderungen dieser Informationen auf dem Laufenden halten können. So könnte beispielsweise in einer App oder einem Widget die Anzahl der ungelesenen Nachrichten im Posteingang eines bestimmten Kontos angezeigt werden.
Bevor Sie diesen Contentanbieter verwenden, rufen Sie die
GmailContract.canReadLabels(Context)
Methode auf, um zu ermitteln, ob die Version der Gmail App des Nutzers diese
Abfragen unterstützt.
Gültiges Gmail-Konto für Abfragen suchen
Eine App muss zuerst die E‑Mail-Adresse eines gültigen Gmail-Kontos finden, um Labelinformationen abzufragen. Mit der
GET_ACCOUNTS
Berechtigung kann die
AccountManager
diese 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, können Sie einen
ContentProvider
URI abrufen, um Abfragen auszuführen. Wir haben eine einfache Klasse namens
GmailContract.java
bereitgestellt, mit der Sie den URI erstellen und die zurückgegebenen Spalten definieren können.
Eine App kann diesen URI direkt abfragen oder besser einen
CursorLoader
verwenden, um einen Cursor mit Informationen zu allen Labels eines Kontos abzurufen:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
Mit den Daten in diesem Cursor können Sie den URI-Wert in der Spalte GmailContract.Labels.URI speichern, um Abfragen für ein einzelnes Label auszuführen und Änderungen daran zu beobachten.
Der Wert NAME für vordefinierte Labels kann je nach Gebietsschema variieren. Verwenden Sie daher nicht
GmailContract.Labels.NAME. Stattdessen können Sie vordefinierte Labels wie „Posteingang“, „Gesendet“ oder „Entwürfe“ programmatisch mithilfe des Stringwerts in der Spalte GmailContract.Labels.CANONICAL_NAME identifizieren:
// 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 finden Sie unter Contentanbieter – Grundlagen.
Beispiel ansehen
Wenn Sie ein Beispiel für diesen Contentanbieter in Aktion sehen möchten, laden Sie eine Beispiel-App herunter.