Как получить изображение контакта и идентификатор для журналов вызовов?

Я пытаюсь прочитать все журналы вызовов и отобразить их очень организованно. Я могу получить журналы вызовов. Но я застрял в ситуации, когда мне нужно знать, существует ли уже контакт вызывающего абонента в моей телефонной книге. CACHED_NAME не всегда возвращает значение (даже после сохранения контакта на устройстве).

Вот как я получаю журналы вызовов на данный момент:

private ArrayList<JSONObject> fetchCallLogs() {
    ArrayList<JSONObject> jsonArray = new ArrayList<>();

    try {
        Cursor cursor   = getContentResolver().query( CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + " DESC" );
        int name        = cursor.getColumnIndex( CallLog.Calls.CACHED_NAME );
        int number      = cursor.getColumnIndex( CallLog.Calls.NUMBER );
        int type        = cursor.getColumnIndex( CallLog.Calls.TYPE );
        int date        = cursor.getColumnIndex( CallLog.Calls.DATE );
        int duration    = cursor.getColumnIndex( CallLog.Calls.DURATION );

        while( cursor.moveToNext() ) {
            String callName     = cursor.getString( name );
            String callNumber   = cursor.getString( number );
            String callType     = cursor.getString( type );
            String callDuration = convertSecondsToHHMMSS( cursor.getString( duration ) );
            String callDateTime = DateFormat.format( "hh:mm:ss (dd MMM, yyyy)", new Date( Long.valueOf( cursor.getString( date ) ) ) ).toString();

            String dir          = "";

            switch( Integer.parseInt( callType ) ) {
                case CallLog.Calls.OUTGOING_TYPE:
                    dir = "Outgoing";
                    break;

                case CallLog.Calls.INCOMING_TYPE:
                    dir = "Incoming";
                    break;

                case CallLog.Calls.MISSED_TYPE:
                    dir = "Missed";
                    break;
            }

            switch( Integer.parseInt( callFeature ) ) {
                case CallLog.Calls.FEATURES_VIDEO:
                    callFeaType = "Video";
                    break;
            }

            JSONObject callRecord = new JSONObject();

            try {
                callRecord.put( "name", callName );
                callRecord.put( "number", callNumber );
                callRecord.put( "type", dir );
                callRecord.put( "date", callDateTime );
                callRecord.put( "duration", callDuration );
            } catch (JSONException e) {
                e.printStackTrace();
            }

            jsonArray.add( callRecord );
        }
        cursor.close();
    } catch ( SecurityException e ) {
        e.printStackTrace();
    }

    return jsonArray;
}

Я хочу получить изображение контакта и CONTACT_ID журналов (если они существуют в устройстве) вместе с приведенным выше результатом.

Мой минимальный уровень API — 21.


person Sanjay Joshi    schedule 01.01.2018    source источник


Ответы (1)


Чтобы получить подробную информацию о журнале вызовов, позвоните по номеру CallLog.Calls.CONTENT_URI().

Cursor contact = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts._ID + "=?", new String[]{String.valueOf(148)}, null, null);
    if (contact != null && contact.moveToNext()) {
        String lookupKey = contact.getString(contact.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
        int contactId = contact.getInt(contact.getColumnIndex(ContactsContract.Contacts._ID));
        Uri contactUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey);

        Cursor calls = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.CACHED_LOOKUP_URI + "=?", new String[]{contactUri.toString()}, CallLog.Calls.DATE + " DESC");
        while (calls.moveToNext()) {
            Log.d(TAG, "type: " + calls.getString(calls.getColumnIndex(CallLog.Calls.TYPE)) + ", number: " + calls.getString(calls.getColumnIndex(CallLog.Calls.NUMBER)) + ", " + "cached_name: " + calls.getString(calls.getColumnIndex(CallLog.Calls.CACHED_NAME)) + ", " + "date: " + calls.getString(calls.getColumnIndex(CallLog.Calls.DATE)));
        }
    }

Чтобы узнать больше о журналах вызовов, прочитайте это.

Надеюсь вам поможет!!

person Hemant Parmar    schedule 01.01.2018