2017-02-24 4 views
0

Ich verwende den folgenden Code, um die letzten Anrufdetails aus der Anrufliste abzurufen.Letzte Anrufdetails aus Anrufliste abrufen

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; 

} 

Das Problem ist, dass es den letzten zweiten Anruf und nicht den letzten Anruf zurückgibt. Ich muss den letzten Anruf zurückgeben. Ich habe es gegoogelt, aber ich bin nicht in der Lage, die perfekte Lösung zu finden. Bitte helfen Sie. Danke im Voraus.

+0

versuchen, diese in ** um von ** Feld 'CallLog.Calls.DEFAULT_SORT_ORDER + "LIMIT 1"' –

+0

@aksacha Noch immer letzter Sekunde Anruf :( –

+0

'managedCursor .moveToFirst' fehlt –

Antwort

1

Fügen Sie diese Zeile 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; 

    } 
+0

'managedCursor.moveToFirst()' oder 'managedCursor.moveToNext()' nimmt keine Änderung vor, da 'limit' auf 1 gesetzt ist, es gibt immer eine Zeile zurück. – arjun

+0

Ich bin bekommen Index Out-of-Bound-Ausnahme nach dem Versuch, diesen Code –

+0

Ich aktualisierte meinen Code überprüfen Sie es .. –

Verwandte Themen