2013-08-22 2 views
0

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

вот мой код ..

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) 

где ошибка в моих code..pls помочь мне ..

+0

Что такое линия 142? –

+0

if (names [0]! = Null) { – chimbu

+0

Кажется, что имена массивов не имеют никакого значения. Вы работаете на эмуляторе? Проверьте, есть ли учетная запись google или нет. –

ответ

-2

Это будет помочь вам много .........

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

How to get the mobile number of current sim card in real device?

для получения имени пользователя: How can I get the google username on Android?

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

+2

Есть много ответов для android, которые просто оставьте ссылку на какой-то другой ответ, они ** должны быть комментариями **. –

0

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

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; 
     } 
} 
+1

У объекта учетной записи есть только два имени свойств, которые являются именем учетной записи, а не именем владельца, например: facebook, twitter, [email protected] и т. Д. И свойством type. без прочтения остальной части вашего кода вы не можете извлечь имя владельца из этого объекта –

Смежные вопросы