получить имя пользователя и номер телефона владельца с помощью менеджера учетных записей в Android

получить имя пользователя и номер телефона владельца с помощью менеджера учетных записей в Android

вот мой код..

public void OwnerInfo() {

     final AccountManager manager = AccountManager.get(this);
        final Account[] accounts = manager.getAccountsByType("com.google");
        final int size = accounts.length;
        String[] names = new String[size];
        for (int i = 0; i < size; i++) {
          names[i] = accounts[i].name;
        }
        if (names[0] != null) {
            accountName = names[0];

            ContentResolver cr = this.getContentResolver();
            Cursor emailCur = cr.query(
                    ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Email.DATA + " = ?",
                    new String[] { accountName }, null);
            while (emailCur.moveToNext()) {
                id = emailCur
                        .getString(emailCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID));
                email = emailCur
                        .getString(emailCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                String newName = emailCur
                        .getString(emailCur
                                .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if (name == null || newName.length() > name.length())
                    name = newName;

                Log.v("Got contacts", "ID " + id + " Email : " + email
                        + " Name : " + name);
            }

            emailCur.close();
            if (id != null) {

                // get the phone number
                Cursor pCur = cr.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                + " = ?", new String[] { id }, null);
                while (pCur.moveToNext()) {
                    phone = pCur
                            .getString(pCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    Log.v("Got contacts", "phone" + phone);
                }
                pCur.close();
            }
        }
    }

но это показывает ошибку, что ..

08-22 11:47:36.392: E/AndroidRuntime(434): FATAL EXCEPTION: main
08-22 11:47:36.392: E/AndroidRuntime(434): java.lang.ArrayIndexOutOfBoundsException
08-22 11:47:36.392: E/AndroidRuntime(434):  at com.param.calltracker.SettingsActivity.OwnerInfo(SettingsActivity.java:142)
08-22 11:47:36.392: E/AndroidRuntime(434):  at com.param.calltracker.SettingsActivity$1.onClick(SettingsActivity.java:78)
08-22 11:47:36.392: E/AndroidRuntime(434):  at android.view.View.performClick(View.java:2485)
08-22 11:47:36.392: E/AndroidRuntime(434):  at android.view.View$PerformClick.run(View.java:9080)
08-22 11:47:36.392: E/AndroidRuntime(434):  at android.os.Handler.handleCallback(Handler.java:587)
08-22 11:47:36.392: E/AndroidRuntime(434):  at android.os.Handler.dispatchMessage(Handler.java:92)
08-22 11:47:36.392: E/AndroidRuntime(434):  at android.os.Looper.loop(Looper.java:123)
08-22 11:47:36.392: E/AndroidRuntime(434):  at android.app.ActivityThread.main(ActivityThread.java:3683)
08-22 11:47:36.392: E/AndroidRuntime(434):  at java.lang.reflect.Method.invokeNative(Native Method)
08-22 11:47:36.392: E/AndroidRuntime(434):  at java.lang.reflect.Method.invoke(Method.java:507)
08-22 11:47:36.392: E/AndroidRuntime(434):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-22 11:47:36.392: E/AndroidRuntime(434):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-22 11:47:36.392: E/AndroidRuntime(434):  at dalvik.system.NativeStart.main(Native Method)

где ошибка в моем коде..пожалуйста, помогите мне..


person chimbu    schedule 22.08.2013    source источник
comment
если (имена [0] != ноль) {   -  person chimbu    schedule 22.08.2013
comment
Кажется, что имена массивов не имеют никакого значения. Вы работаете на эмуляторе? Проверьте, присутствует ли учетная запись Google или нет   -  person Sunil Mishra    schedule 22.08.2013
comment
Я пытаюсь добавить сообщение об ошибке учетной записи Google, которое не может открыть соединение с сервером. Как добавить учетную запись Google в мой эмулятор?   -  person chimbu    schedule 22.08.2013
comment
Перейдите к настройкам в эмуляторе, а затем перейдите к учетным записям, синхронизируйте и добавьте учетную запись Google.   -  person Sunil Mishra    schedule 22.08.2013
comment
Я пытаюсь добавить сообщение об ошибке учетной записи Google, которое не может открыть соединение с сервером.   -  person chimbu    schedule 22.08.2013
comment
Я думаю, это вам очень поможет. stackoverflow.com/questions/2206596/   -  person Sridhar    schedule 23.08.2013


Ответы (2)


Это вам очень поможет..........

для получения мобильного номера:

Как получить номер мобильного телефона текущей сим-карты в реальном устройстве?

для получения имени пользователя: Как я могу получить имя пользователя Google на Android ?

Попробуйте запустить на реальном устройстве....

person Sridhar    schedule 23.08.2013
comment
Есть много ответов для Android, которые просто оставляют ссылку на какой-то другой ответ, они должны быть комментариями. - person Iharob Al Asimi; 13.08.2015

Этот код предоставит владельцу полную информацию
Попробуйте этот код:-

public class EmailFetcher {



        static String getName(Context context) {
            Cursor CR=null;
            CR=getOwner(context);
            String id="",name="";
            while (CR.moveToNext()) {
                name = CR
                        .getString(CR
                                .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            }

            return name;
        }
        static String getEmailId(Context context) {

            Cursor CR=null;
            CR=getOwner(context);
            String id="",email="";
            while (CR.moveToNext()) {
                id = CR.getString(CR
                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID));
                email = CR
                        .getString(CR
                                .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
            }
            return email;
    }


        static Cursor getOwner(Context context) {

            String accountName = null;
            Cursor emailCur=null;
            AccountManager accountManager = AccountManager.get(context);
            Account[] accounts = accountManager.getAccountsByType("com.google");
            if (accounts[0].name != null) {
                accountName = accounts[0].name;
                String where = ContactsContract.CommonDataKinds.Email.DATA + " = ?";
                ArrayList<String> what = new ArrayList<String>();
                what.add(accountName);
                Log.v("Got account", "Account " + accountName);
                for (int i = 1; i < accounts.length; i++) {
                    where += " or " + ContactsContract.CommonDataKinds.Email.DATA + " = ?";
                    what.add(accounts[i].name);
                    Log.v("Got account", "Account " + accounts[i].name);
                }
                String[] whatarr = (String[]) what.toArray(new String[what.size()]);
                ContentResolver cr = context.getContentResolver();
                emailCur = cr.query(
                        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                        where,
                        whatarr, null);

               /* if (id != null) {

                    // get the phone number
                    Cursor pCur = cr.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                    + " = ?", new String[]{id}, null);
                    while (pCur.moveToNext()) {
                        phone = pCur
                                .getString(pCur
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        Log.v("Got contacts", "phone" + phone);
                    }
                    pCur.close();
                }*/
            }
            return emailCur;
        }
}
person Sanjit Majee    schedule 23.06.2015
comment
объект учетной записи имеет только два свойства: имя, которое является именем учетной записи, а не именем владельца, например: facebook, twitter, [email protected] и т. д., и свойство типа. не читая остальную часть вашего кода, вы не можете извлечь имя владельца из этого объекта - person Mina Gabriel; 06.02.2016