Как получить название компании из выбранного контакта - PullRequest
1 голос
/ 28 мая 2019

Использование ContactsContract Я могу получить и отобразить выбранный номер мобильного телефона и соответствующее имя контакта.

Но вместо того, чтобы возвращать название компании, он снова возвращает номер мобильного телефона.

Намерение, которое я использую, чтобы выбрать конкретный номер телефона при наличии нескольких номеров

Intent calContctPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                    calContctPickerIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
                    startActivityForResult(calContctPickerIntent, 1);

вот основной код

 @Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);

    switch (reqCode) {
        case (1):
            if (resultCode == Activity.RESULT_OK) {
                Uri contctDataVar = data.getData();

                Cursor contctCursorVar = getContentResolver().query(contctDataVar, null, null, null, null);
                if (contctCursorVar.getCount() > 0) {
                    while (contctCursorVar.moveToNext()) {
                        String ContctUidVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts._ID));

                        String ContctNamVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                        String Companyname = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));


                        Log.i("Names", ContctNamVar);

                        if (Integer.parseInt(contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                            // Query phone here. Covered next
                            String ContctMobVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            String Companyname2 = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY));

                            mobile.setText(ContctMobVar);
                            custname.setText(ContctNamVar);
                            companyname.setText(Companyname2);

                            Log.i("Number", ContctMobVar);

                        }

                    }
                }
            }
            break;
    }
}

Мне нужно найти способ восстановить название компании, сохраненное под выбранным контактом.

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Вы можете попробовать что-то вроде этого:

ContentResolver mContentResolver = this.getContentResolver();
 Cursor contacts = cr.query(ContactsContract.Contacts.CONTENT_URI,
                        null, null, null, null);

String mContactId = contacts.getString(contacts.getColumnIndex(ContactsContract.Contacts._ID));
String mRawContactId = getRawContactID(mContactId);
String mCompanyName = getCompanyName(mRawContactId);


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

    }
0 голосов
/ 29 мая 2019

С помощью решения, предоставленного @Shiva Snape, я смог решить проблему.

Код кнопки для вызова приложения контактов и выбора соответствующего номера

        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
            startActivityForResult(intent, 1);

Код для сбора номера телефона, имени и названия компании.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data != null) {
        Uri uri = data.getData();

        if (uri != null) {
            Cursor c = null;


            try {
                c = getContentResolver().query(uri, new String[]{
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                                ContactsContract.CommonDataKinds.Phone.TYPE,
                                ContactsContract.CommonDataKinds.Phone.NUMBER,
                                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME},
                        null, null, null);
                ContentResolver mContentResolver = this.getContentResolver();


                if (c != null && c.moveToFirst()) {
                    String number = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    String name = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    String contactId = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
                    String rawContactId = getRawContactId(contactId);
                    String companyName = getCompanyName(rawContactId);
                    int type = c.getInt(1);
                    showSelectedNumber(type, number);

                }
            } finally {
                if (c != null) {
                    c.close();
                }
            }
        }
    }
}

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 = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
                null, orgWhere, orgWhereParams, null);

        if (cursor == null) return null;
        String Vname = null;
        if (cursor.moveToFirst()) {
            Vname = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY));

        }
        cursor.close();
        return Vname;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

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 = getContentResolver().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);
}


public void showSelectedNumber(int type, String number) {
    Toast.makeText(this, type + ": " + number, Toast.LENGTH_LONG).show();
}
}

Спасибо сообществу Stack Overflow за помощь. Надеюсь, что это станет полезным для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...