Получить контактное имя через контактный номер не работает в Android 9.0 Pie - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу получить имя для номера входящего вызова из списка контактов следующим способом.это работает на всех версиях Android, но это дает ноль в Android 9.0 пирог.

private String getContactName(String number, Context context) {

       String contactName  = "";

       String[] projection = new String[] {
            ContactsContract.PhoneLookup.DISPLAY_NAME,
            ContactsContract.PhoneLookup.NUMBER,
            ContactsContract.PhoneLookup.HAS_PHONE_NUMBER };


       Uri contactUri = Uri.withAppendedPath(
            ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
            Uri.encode(number));


       Cursor cursor = context.getContentResolver().query(contactUri,
            projection, null, null, null);


       if(cursor != null) {
        if (cursor.moveToFirst()) {
            contactName = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
        }
        cursor.close();

       }

       return contactName.equals("") ? number : contactName;

}

Я также попробую новый метод, но он также не работает и дает мне нулевое значение.я получил этот код из документации разработчика Google.что не так с моим кодом или, пожалуйста, помогите мне, каким способом я могу получить контактное имя для номера.

public String onCreateIncomingConnection (String s) {
    // Get the telephone number from the incoming request URI.
    String phoneNumber = s;

    String displayName = "Unknown caller";
    boolean isCallerInWorkProfile = false;

    // Look up contact details for the caller in the personal and work profiles.
    Uri lookupUri = Uri.withAppendedPath(
            ContactsContract.PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI,
            Uri.encode(phoneNumber));
    Cursor cursor = getContentResolver().query(
            lookupUri,
            new String[]{
                    ContactsContract.PhoneLookup._ID,
                    ContactsContract.PhoneLookup.DISPLAY_NAME,
                    ContactsContract.PhoneLookup.CUSTOM_RINGTONE
            },
            null,
            null,
            null);

    // Use the first contact found and check if they're from the work profile.
    if (cursor != null) {
        try {
            if (cursor.moveToFirst() == true) {
                displayName = cursor.getString(1);
                isCallerInWorkProfile =
                        ContactsContract.Contacts.isEnterpriseContactId(cursor.getLong(0));
            }
        } finally {
            cursor.close();
        }
    }

    // Return a configured connection object for the incoming call.
    // MyConnection connection = new MyConnection();
    // connection.setCallerDisplayName(displayName, TelecomManager.PRESENTATION_ALLOWED);
    //
    // Our app's activity uses this value to decide whether to show a work badge.
   //   connection.setIsCallerInWorkProfile(isCallerInWorkProfile);

    // Configure the connection further ...
    return displayName;
}
...