web-dev-qa-db-de.com

Die E-Mail-Adresse des Android-Besitzers gut erhalten

Ich möchte, dass der Benutzer mir seine E-Mail-Adresse zur Verfügung stellt, ohne diese einzugeben. Idealerweise gibt es ein Textfeld, in das der Benutzer entweder eine E-Mail-Adresse eingeben kann oder auf die Schaltfläche zum automatischen Ausfüllen klicken kann.

In einer früheren Frage schlägt Roman Nurik vor, einen AccountManager zu verwenden , um damit umzugehen, aber dazu muss meine App das GET_ACCOUNTS-Privileg verwenden; Meine App kann dann auf alle Benutzerkonten auf dem Gerät zugreifen, einschließlich ihrer Facebook- und Twitter-Konten. Diese Erlaubnis scheint viel zu breit für das, was ich will.

Gibt es eine schönere Art und Weise, wie Sie damit umgehen können, ohne dass meine App eine solche Erlaubnis erhalten muss?

41
Dan Fabulich

Ich weiß, ich bin viel zu spät, aber das könnte für andere nützlich sein.

Ich denke, der beste Weg, ein E-Mail-Feld jetzt automatisch auszufüllen, ist die Verwendung von AccountPicker

Wenn Ihre App über die Berechtigung GET_ACCOUNTS verfügt und es nur ein Konto gibt, erhalten Sie es sofort. Wenn Ihre App es nicht hat oder wenn es mehr als ein Konto gibt, erhalten Benutzer eine Eingabeaufforderung, damit sie die Aktion autorisieren können oder nicht.

Ihre App muss die Google Play-Dienste einschließen, erfordert jedoch keine Berechtigungen.

Dieser gesamte Vorgang schlägt bei älteren Android-Versionen (2.2 oder höher) oder bei Nicht-Bereitstellung von Google Play fehl. Sie sollten diesen Fall in Betracht ziehen.

Hier ist ein grundlegendes Codebeispiel:

    private static final int REQUEST_CODE_EMAIL = 1;
    private TextView email = (TextView) findViewById(R.id.email);

    // ...

    try {
        Intent intent = AccountPicker.newChooseAccountIntent(null, null,
                new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE }, false, null, null, null, null);
        startActivityForResult(intent, REQUEST_CODE_EMAIL);
    } catch (ActivityNotFoundException e) {
        // TODO
    }

    // ...

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {
            String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
            email.setText(accountName);
        }
    }
111
Jorge Cevallos

In der Tat können Sie dies nicht nur ohne GET_ACCOUNTS tun, die gewünschten Informationen sind nur in den Kontodaten des Nutzers (Google) vorhanden.

Auf meinem Sprint-Telefon lautet der Adresszuweiser für den Besitzer [email protected]. Dies kann mit getprop von einer Shell aus gesehen werden. Aber das ist nicht meine primäre E-Mail-Adresse oder auch nur eine, die ich je benutzt habe. Was Sie wollen ist, ist meine Google Mail-Adresse, und diese wird in den Android-Kontodaten gespeichert.

Eigentlich möchten Sie eines der zwei-. Dies ist ein weiterer Grund, warum Sie GET_ACCOUNTS benötigen. Wenn Sie nach meiner E-Mail-Adresse fragen, müssen Sie mir die Möglichkeit geben, unter den beiden @ gmail.com-Konten auszuwählen, die ich auf dem Gerät konfiguriert habe.Iweiß, welches meiner bevorzugten ist (obwohl das auch kontextabhängig ist), aber AFAIK wird vom System nicht als "primär" oder "voreingestellt" betrachtet.

19
FeRD

Ein alternativer Ansatz könnte darin bestehen, den mit dem Gerät verknüpften Google-Nutzernamen zu finden, aus dem Sie eine [email protected]-Adresse rekonstruieren können, dies erfordert jedoch weiterhin die Verwendung des AccountManagers. Siehe Zugriff auf Google-Konto-ID/Benutzername über Android .

0
Graham Borland