Die Gmail App für Android enthält ein Contentanbieter mit denen Drittanbieter-Entwickler Labelinformationen wie Name und Anzahl ungelesener Artikel und bleiben Sie auf dem Laufenden, 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 eine
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