Получить информацию о последнем вызове из журнала вызовов

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

public static CallDetails getLastCallDetails(Context context) {

    CallDetails callDetails = new CallDetails();

    Uri contacts = CallLog.Calls.CONTENT_URI;
    try {

        Cursor managedCursor = context.getContentResolver().query(contacts, null, null, null, android.provider.CallLog.Calls.DATE + " DESC limit 1;");

        int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
        int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
        int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
        int incomingtype = managedCursor.getColumnIndex(String.valueOf(CallLog.Calls.INCOMING_TYPE));


        while (managedCursor.moveToNext()) {
            String callType;
            String phNumber = managedCursor.getString(number);
            String callerName = getContactName(context, phNumber);
            if(incomingtype == -1){
                callType = "incoming";
            }
            else {
                callType = "outgoing";
            }
            String callDate = managedCursor.getString(date);
            String callDayTime = new      Date(Long.valueOf(callDate)).toString();

            String callDuration = managedCursor.getString(duration);

            callDetails.setCallerName(callerName);
            callDetails.setCallerNumber(phNumber);
            callDetails.setCallDuration(callDuration);
            callDetails.setCallType(callType);
            callDetails.setCallTimeStamp(callDayTime);

        }
        managedCursor.close();

    } catch (SecurityException e) {
        Log.e("Security Exception", "User denied call log permission");

    }

    return callDetails;

}

Проблема в том, что он возвращает последний второй вызов, а не последний вызов. Мне нужно перезвонить на последний звонок. Я искал это, но я не могу найти идеальное решение. Пожалуйста помоги. Заранее спасибо.


person Mehul Kanzariya    schedule 24.02.2017    source источник
comment
попробуйте это в порядке поля CallLog.Calls.DEFAULT_SORT_ORDER + " LIMIT 1"   -  person ak sacha    schedule 24.02.2017
comment
@aksacha Все еще получаю последний второй звонок :(   -  person Mehul Kanzariya    schedule 24.02.2017
comment
managedCursor.moveToFirst отсутствует   -  person ak sacha    schedule 24.02.2017
comment
ты пытался?   -  person ak sacha    schedule 24.02.2017


Ответы (1)


Добавьте эту строку managedCursor.moveToFirst()

 public static CallDetails getLastCallDetails(Context context) {

        CallDetails callDetails = new CallDetails();

        Uri contacts = CallLog.Calls.CONTENT_URI;
        try {

            Cursor managedCursor = context.getContentResolver().query(contacts, null, null, null, android.provider.CallLog.Calls.DATE + " DESC limit 1;");

            int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
            int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
            int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
            int incomingtype = managedCursor.getColumnIndex(String.valueOf(CallLog.Calls.INCOMING_TYPE));

           if(managedCursor.moveToFirst()){ // added line

            while (managedCursor.moveToNext()) { 
                String callType;
                String phNumber = managedCursor.getString(number);
                String callerName = getContactName(context, phNumber);
                if(incomingtype == -1){
                    callType = "incoming";
                }
                else {
                    callType = "outgoing";
                }
                String callDate = managedCursor.getString(date);
                String callDayTime = new      Date(Long.valueOf(callDate)).toString();

                String callDuration = managedCursor.getString(duration);

                callDetails.setCallerName(callerName);
                callDetails.setCallerNumber(phNumber);
                callDetails.setCallDuration(callDuration);
                callDetails.setCallType(callType);
                callDetails.setCallTimeStamp(callDayTime);

          }
        }
            managedCursor.close();

        } catch (SecurityException e) {
            Log.e("Security Exception", "User denied call log permission");

        }

        return callDetails;

    }
person ak sacha    schedule 24.02.2017
comment
managedCursor.moveToFirst() или managedCursor.moveToNext() не вносят никаких изменений, так как limit установлено в 1, оно всегда возвращает одну строку. - person arjun; 24.02.2017
comment
Я получаю исключение Index out ofbound после попытки этого кода - person Mehul Kanzariya; 24.02.2017
comment
Я добавил задержку в 5 секунд перед получением записей о звонках, и теперь все работает отлично. - person Mehul Kanzariya; 27.02.2017