Я пытаюсь прочитать все журналы вызовов и отобразить их очень организованно. Я могу получить журналы вызовов. Но я застрял в ситуации, когда мне нужно знать, существует ли уже контакт вызывающего абонента в моей телефонной книге. 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.