не получать значение пропущенного вызова из журналов вызовов android

эй, я не могу получить тип звонка == пропущенный звонок и только текущую дату. Его можно получить из запроса курсора, я пробовал это, но получаю тип вызовов как пропущенный вызов. Я использую это в методе onCreate, но не получаю никакого значения в logcat???? Вот мой фрагмент кода, любая помощь будет принята с благодарностью...... заранее спасибо

String where = CallLog.Calls.TYPE+"="+CallLog.Calls.MISSED_TYPE;
    int missedtype=CallLog.Calls.MISSED_TYPE;
    String missed=Integer.toString(missedtype);

    String timestamp = String.valueOf(getTodayTimestamp());

    Cursor cursor = this.getContentResolver()
            .query(CallLog.Calls.CONTENT_URI,
                    new String[] { CallLog.Calls.DATE, CallLog.Calls.TYPE,
                            CallLog.Calls.DURATION, CallLog.Calls.NUMBER,
                            CallLog.Calls._ID },
                    CallLog.Calls.DATE + ">?" + " and "
                            + CallLog.Calls.TYPE + "=?",
                    new String[] { timestamp, String.valueOf(CallLog.Calls.MISSED_TYPE) },
                    CallLog.Calls.DATE);
    //Cursor managedCursor = this.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.DATE + ">= ?", new String[]{timestamp}, null);
     //Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI,   null, where , null, CallLog.Calls.DATE+ " >= ?");

        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 LogphNumber = cursor.getString(number);  
            String callType = cursor.getString(type);
            String callDate = cursor.getString(date);              
            Date callDayTime = new Date(Long.valueOf(callDate));
            String callDuration = cursor.getString(duration);
    {

        if(cursor.getCount()>1){

           System.out.println("Total Logs::>>>>>>>>> "+cursor.getCount());
           System.out.println("\nPhoneNo:----"+LogphNumber);            
           System.out.println("\nCallDate: "+callDayTime);
           System.out.println("\nCallDuration in Seconds :"+callDuration);
           System.out.println("\n-----------------------");

       }else if(cursor.getCount()==0){
           System.out.println("No Missed calls");
       }
    }
        }cursor.close();

        }

person Mayank Nema    schedule 28.02.2014    source источник


Ответы (1)


попробуй это:

String timestamp = String.valueOf(getTodayTimestamp());
Cursor cursor = this.getContentResolver()
            .query(CallLog.Calls.CONTENT_URI,
                    new String[] { CallLog.Calls.DATE, CallLog.Calls.TYPE,
                            CallLog.Calls.DURATION, CallLog.Calls.NUMBER,
                            CallLog.Calls._ID },
                    CallLog.Calls.DATE + ">?" + " and "
                            + CallLog.Calls.TYPE + "=?",
                    new String[] { timestamp, String.valueOf(CallLog.Calls.MISSED_TYPE) },
                    CallLog.Calls.DATE);
person Ricky    schedule 28.02.2014
comment
Эй, в моем журнале появляется ошибка: 02-28 12:09:42.484: E/AndroidRuntime(20312): Причина: java.lang.IllegalStateException: Не удалось прочитать строку 0, столбец -1 из CursorWindow. Убедитесь, что курсор правильно инициализирован, прежде чем обращаться к его данным. 02-28 12:09:42.484: E/AndroidRuntime(20312): в com.example.demo.MainActivity.getCallDetails(MainActivity.java:129) - person Mayank Nema; 28.02.2014
comment
Можете ли вы вставить несколько фрагментов кода о getCallDetails()? И я редактирую свой ответ, я меняю new String[] {timestamp, CallLog.Calls.MISSED_TYPE} на new String[] {timestamp , String.valueOf(CallLog.Calls.MISSED_TYPE)}. У меня это работает нормально. - person Ricky; 28.02.2014
comment
Я думаю, вы пытались получить доступ к данным по неправильному индексу столбца. - person Ricky; 28.02.2014
comment
Теперь я получаю это в своем журнале cat вместо любого значения: 02-28 12:35:08.683: D/(31807): монитор графического процессора неактивен - не удалось найти libgpumonitor.so [(null)] или он не включен (debug. egl.hw.gpumonitor = 0) 02-28 12:35:08.683: I/brcm-gr(31807): [gralloc_lock]: новое использование 0x933 - person Mayank Nema; 28.02.2014
comment
Я запустил ваш код, но у меня он по-прежнему работает нормально. Я только что изменил getTodayTimestamp() на new Date().getTime() и CallLog.Calls. DATE + ›? на CallLog.Calls.DATE + ‹?.Потому что я думаю, что более поздняя дата звонка не имеет смысла.Вы уверены, что из вашего приложения возникла новая ошибка? - person Ricky; 28.02.2014
comment
да, я уверен, что после изменения кода, который вы предлагаете, появляется ошибка выше: gpu monitor inactive error. Можете ли вы дать свой код, который вы тестируете, чтобы, заменив ваш, я мог добиться того, чего хочу???? - person Mayank Nema; 28.02.2014
comment
Я просто реализую getTodayTimestamp() как private long getTodayTimestamp() { return new Date().getTime(); - person Ricky; 28.02.2014