SORU
21 Ocak 2010, PERŞEMBE


Nasıl'In birincil e-posta adresini Android cihaz almak için

Nasıl Android e-posta adresi birincil (veya e-posta listesi adresi) alabilirim?

OS 2.0 üzerinde birden çok e-posta adresleri var anladığım kadarıyla, ama 2.0 altında sadece bir e-posta adresi, cihaz başına alabilirsin.

CEVAP
1 ŞUBAT 2010, PAZARTESİ


Bunu yapmak için çeşitli yollar, aşağıda gösterilmiştir.

Dostça bir uyarı olarak, dikkatli ve hesap, profil ve iletişim verileri ile ilgili, kullanıcıya ön. Bir kullanıcının e-posta adresini veya diğer kişisel bilgileri kötüye, kötü şeyler olabilir.

Yöntem A. AccountManager (API seviye 5) Kullanın

AccountManager.getAccounts AccountManager.getAccountsByType cihazdaki tüm hesap adlarının bir listesini almak için kullanabilirsiniz. Neyse ki, bazı hesap türleri için (com.google dahil), hesap adları, e-posta adresleri. Aşağıda örnek yer alıyor.

Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8 
Account[] accounts = AccountManager.get(context).getAccounts();
for (Account account : accounts) {
    if (emailPattern.matcher(account.name).matches()) {
        String possibleEmail = account.name;
        ...
    }
}

Bu GET_ACCOUNTS izni gerektirir unutmayın:

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

Daha fazla kullanarak AccountManager SDK Contact Manager örnek kod bulunabilir.

Yöntem B. ContactsContract.Profile (API level 14 )

Android 4.0 (Ice Cream Sandwich), kendi profilinize girerek kullanıcının e-posta adresleri alabilirsiniz. Kullanıcı profiline erişim izinleri iki (daha o aşağıda) gerektirdiğinden biraz ağır olduğunu, ancak e-posta adresleri veri oldukça hassas parçalardır, bu kabul fiyat.

Aşağıda CursorLoader bir profil verileri satır e-posta adreslerini içeren almak için kullanan tam bir örnek.

public class ExampleActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getLoaderManager().initLoader(0, null, this);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle arguments) {
        return new CursorLoader(this,
                // Retrieve data rows for the device user's 'profile' contact.
                Uri.withAppendedPath(
                        ContactsContract.Profile.CONTENT_URI,
                        ContactsContract.Contacts.Data.CONTENT_DIRECTORY),
                ProfileQuery.PROJECTION,

                // Select only email addresses.
                ContactsContract.Contacts.Data.MIMETYPE   " = ?",
                new String[]{ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE},

                // Show primary email addresses first. Note that there won't be
                // a primary email address if the user hasn't specified one.
                ContactsContract.Contacts.Data.IS_PRIMARY   " DESC");
    }

    @Override
    public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
        List<String> emails = new ArrayList<String>();
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            emails.add(cursor.getString(ProfileQuery.ADDRESS));
            // Potentially filter on ProfileQuery.IS_PRIMARY
            cursor.moveToNext();
        }

        ...
    }

    @Override
    public void onLoaderReset(Loader<Cursor> cursorLoader) {
    }

    private interface ProfileQuery {
        String[] PROJECTION = {
                ContactsContract.CommonDataKinds.Email.ADDRESS,
                ContactsContract.CommonDataKinds.Email.IS_PRIMARY,
        };

        int ADDRESS = 0;
        int IS_PRIMARY = 1;
    }
}

Bu READ_PROFILE READ_CONTACTS izinleri gerektirir:

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

5/6/2012-Android 4.0 için profil erişim hakkında bilgi Eklendi

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • Blendtec

    Blendtec

    30 EKİM 2006
  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008