S
sem_thesis
Fortgeschrittenes Mitglied
- 0
Hallo zusammen!
Ich arbeite noch immer an meinem CallLog-Service, der aktiviert wird, sobald der Telefon-Zustand (Variable PHONE_STATE) verändert wird.
Dazu habe ich die folgende Listener-Klasse implementiert:
Sobald der Phone in den inaktiven IDLE Zustand gelangt, sollte die Funktion CollectAndSaveLogs()jedesmal NEU aufgerufen werden und die neuesten Daten aufsammeln und in die Datenbank schreiben.
Beim Testen habe ich jedoch gemerkt, dass einfach der erste Call (name, nummer, calltype) gespeichert wird. Der Listener wird immer wieder aufgerufen, doch die Logs geben immer noch die alten Werte an.
Was soll das? Muss ich den cursor weiterbewegen mit moveToNext()? Oder muss ich eine andere Sortiermethode für den Cursor wählen (ASC und DESC - hab's probiert, aber es hat trotzdem nicht funktioniert).
PS: Code ist im Attachment
Ich arbeite noch immer an meinem CallLog-Service, der aktiviert wird, sobald der Telefon-Zustand (Variable PHONE_STATE) verändert wird.
Dazu habe ich die folgende Listener-Klasse implementiert:
Code:
//////// Private Class MyPhoneStateListener /////////
private class MyPhoneStateListener extends PhoneStateListener {
// This method is a Listener on the Phone State: Whenever it changes --> a new query is made to Call Logs
public void onCallStateChanged(int state, String incomingNumber){
Log.d(TAG, "STATE HAS CHANGED!");
// Register New Phone Logs
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
Log.d(TAG, "Phone is in idle state.");
CollectAndSaveLogs();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(TAG, "Phone-User has initiated/accepted a call");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG, "Phone-User has received a call");
break;
}
}
}
public void CollectAndSaveLogs() {
// Declare all values, which need to be logged
String date = new String();
String time = new String();
String name = new String();
String phonenumber = new String();
String duration = new String();
String callclassification = new String();
String d = new String();
// Collect new Phone Logs //
Cursor c = getContentResolver().query(
android.provider.CallLog.Calls.CONTENT_URI,
null,
null,
null,
null);
c.moveToFirst();
date = formatDate.format(new Date());
time = formatTime.format(new Date());
name = c.getString(c.getColumnIndex(CallLog.Calls.CACHED_NAME));
phonenumber = c.getString(c.getColumnIndex(CallLog.Calls.NUMBER));
d = c.getString(c.getColumnIndex(CallLog.Calls.DURATION));
duration = formatDuration(d);
callclassification = c.getString(c.getColumnIndex(CallLog.Calls.TYPE));
Log.d(TAG, date);
Log.d(TAG, time);
Log.d(TAG, name);
Log.d(TAG, phonenumber);
Log.d(TAG, duration);
Log.d(TAG, callclassification);
c.close();
// Write new Phone Logs in Database //
db.open();
db.insertCallLogs(date, time, name, phonenumber, duration, callclassification);
db.close();
}
Beim Testen habe ich jedoch gemerkt, dass einfach der erste Call (name, nummer, calltype) gespeichert wird. Der Listener wird immer wieder aufgerufen, doch die Logs geben immer noch die alten Werte an.
Was soll das? Muss ich den cursor weiterbewegen mit moveToNext()? Oder muss ich eine andere Sortiermethode für den Cursor wählen (ASC und DESC - hab's probiert, aber es hat trotzdem nicht funktioniert).
PS: Code ist im Attachment
Anhänge
Zuletzt bearbeitet: