J'ai essayé le code ci-dessous en ce que la durée d'appel n'est pas correcte, la durée d'appel précédente est affichée pour l'appel téléphonique en cours. J'ai essayé le code et cherché sur le débordement de la pile, le problème n'est pas résolu.Je reçois la durée d'appel précédente au lieu de la durée du dernier appel
private int outgoingCallDuration(Context context) {
int sum = 0;
StringBuffer sb = new StringBuffer();
try {
//
Cursor managedCursor = context.getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI, null, null, null, null);
int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE);
int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
sb.append("Call Details :");
Log.e("total count", "" + managedCursor.getCount());
//managedCursor.moveToPosition(managedCursor.getCount() - 1);
int currentCount = 0, lastPosition = 0;
while (managedCursor.moveToNext()) {
currentCount++;
//managedCursor.moveToPosition(managedCursor.getCount() - 1);
String phNumber = managedCursor.getString(number);
String callType = managedCursor.getString(type);
String callDate = managedCursor.getString(date);
java.sql.Date callDayTime = new java.sql.Date(Long.valueOf(callDate));
String callDurations = managedCursor.getString(duration);
String dir = null;
int dircode = Integer.parseInt(callType);
switch (dircode) {
case CallLog.Calls.OUTGOING_TYPE:
// lastPosition = currentCount;
dir = "OUTGOING";
break;
case CallLog.Calls.INCOMING_TYPE:
dir = "INCOMING";
break;
case CallLog.Calls.MISSED_TYPE:
dir = "MISSED";
break;
}
lastPosition = currentCount;
}
lastPosition--;
// managedCursor.moveToLast();
managedCursor.moveToPosition(lastPosition);
int requiredNumber = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
int durations = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
String phNumber = managedCursor.getString(requiredNumber);
String dur = managedCursor.getString(durations);
// Long durat = Long.parseLong(dur);
int myNum = Integer.parseInt(dur);
managedCursor.close();
Log.e("last position number ", phNumber);
Log.e("last position duration ", dur);
return myNum;
} catch (SecurityException ex) {
Log.d("CallReceiver", "outgoingCallDuration: Permission to read call is not allowed by user!");
return 0;
}
}
S'il vous plaît aidez-moi à résoudre ce problème. Comment obtenir la durée du dernier appel dans Android.
[Cochez cette case fil] (https://stackoverflow.com/a/22069349/5130133) –
double possible de [Get Dernière Durée d'appel dans android] (https://stackoverflow.com/questions/19493360/get-last-call-duration-in-android) – sudo