2017-09-17 23 views
0

私は自分のアプリに連絡先をインポートしようとしていますが、会社名の取得には苦労しています。私は連絡先の会社名を取得しようとしている私のコードにコメントを追加する連絡先の会社名をandroidで取得する方法

public List<ContactItem> getContactList(){ 
    ArrayList<ContactItem> contactList = new ArrayList<ContactItem>(); 

    Uri contactUri = ContactsContract.Contacts.CONTENT_URI; 
    String[] PROJECTION = new String[] { 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME, 
      ContactsContract.Contacts.HAS_PHONE_NUMBER, 
    }; 
    String SELECTION = ContactsContract.Contacts.HAS_PHONE_NUMBER + "='1'"; 
    Cursor contacts = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, PROJECTION, SELECTION, null, null); 


    if (contacts.getCount() > 0) 
    { 
     while(contacts.moveToNext()) { 
      ContactItem aContact = new ContactItem(); 
      int idFieldColumnIndex = 0; 
      int nameFieldColumnIndex = 0; 
      int numberFieldColumnIndex = 0; 
      int companyFieldColumnIndex = 0; 

      String contactId = contacts.getString(contacts.getColumnIndex(ContactsContract.Contacts._ID)); 

      nameFieldColumnIndex = contacts.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME); 

      if (nameFieldColumnIndex > -1) 
      { 
       aContact.setName(contacts.getString(nameFieldColumnIndex)); 
      } 

      // Tried to get a company, but 
      // this always returns -1 
      companyFieldColumnIndex = contacts.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY); 
      if (companyFieldColumnIndex > -1) 
      { 
       Log.d(TAG, "getContactList: starts"); 
       aContact.setCompany(contacts.getString(companyFieldColumnIndex)); 
      } 


      PROJECTION = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER}; 
      final Cursor phone = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, ContactsContract.Data.CONTACT_ID + "=?", new String[]{String.valueOf(contactId)}, null); 
      if(phone.moveToFirst()) { 
       while(!phone.isAfterLast()) 
       { 
        numberFieldColumnIndex = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 

        if (numberFieldColumnIndex > -1) 
        { 
         aContact.setPhoneNum(phone.getString(numberFieldColumnIndex)); 
         phone.moveToNext(); 
         TelephonyManager mTelephonyMgr; 
         mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
         if (!mTelephonyMgr.getLine1Number().contains(aContact.getPhoneNum())) 
         { 
          contactList.add(aContact); 
         } 
        } 
       } 
      } 
      phone.close(); 
     } 

     contacts.close(); 
    } 

    return contactList; 
} 

、しかし、私は常に取得-1:ここに私のコードです。一部の連絡先には会社名が付いているので、コードのこの部分で何か間違っています。どのように会社を正しく取得するには?

答えて

1

最初に、プロジェクションを通過していますが、プロジェクションには会社名に関連するものは含まれていませんので、取得できません。

私がよく分からないことは、会社名を取得するために、IDの代わりに連絡先のRawIdを渡す必要があることです。ここではあなたがそれを行うべきか何か、

String contactId = contacts.getString(contacts.getColumnIndex(ContactsContract.Contacts._ID)); 
String rawContactId = getRawContactId(contactId); 
String companyName = getCompanyName(rawContactId); 

&ここにはあなたが必要とする機能であります。

private String getRawContactId(String contactId) { 
     String[] projection = new String[]{ContactsContract.RawContacts._ID}; 
     String selection = ContactsContract.RawContacts.CONTACT_ID + "=?"; 
     String[] selectionArgs = new String[]{contactId}; 
     Cursor c = mContentResolver.query(ContactsContract.RawContacts.CONTENT_URI, projection, selection, selectionArgs, null); 
     if (c == null) return null; 
     int rawContactId = -1; 
     if (c.moveToFirst()) { 
      rawContactId = c.getInt(c.getColumnIndex(ContactsContract.RawContacts._ID)); 
     } 
     c.close(); 
     return String.valueOf(rawContactId); 

    } 

と:

private String getCompanyName(String rawContactId) { 
     try { 
      String orgWhere = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
      String[] orgWhereParams = new String[]{rawContactId, 
        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; 
      Cursor cursor = mContentResolver.query(ContactsContract.Data.CONTENT_URI, 
        null, orgWhere, orgWhereParams, null); 

      if (cursor == null) return null; 
      String name = null; 
      if (cursor.moveToFirst()) { 
       name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY)); 
      } 
      cursor.close(); 
      return name; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 

    } 
関連する問題