Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Aktuelle CallLogs ausgeben

Das Thema "Aktuelle CallLogs ausgeben" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 07.04.2011, 16:33   #1 (permalink)
Android-Hilfe.de Mitglied

Modell: Nexus One

Registriert seit: 06.03.2011
Beiträge: 111
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Standard Aktuelle CallLogs ausgeben

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:
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();
        
        }
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
Angehängte Dateien
Dateityp: zip MyCallLog.zip (59,3 KB, 4x aufgerufen)

Geändert von sem_thesis (07.04.2011 um 16:40 Uhr)
sem_thesis ist offline   Mit Zitat antworten
Alt 07.04.2011, 18:03   #2 (permalink)
Android Experte

Registriert seit: 24.01.2011
Beiträge: 637
Abgegebene Danke: 5
Erhielt 572 Danke für 228 Beiträge
Standard AW: Aktuelle CallLogs ausgeben

Zitat:
Zitat von sem_thesis Beitrag anzeigen
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:
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();
        
        }
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
Warte nach dem State-Wechsel nach IDLE einfach etwas (ich benutze 5s als Wartezeit). Wenn der Benutzer auflegt, muss die Schreibe-Datensatz-in-Datenbank-Magie, die ja auch von einem PhoneStateListener getriggert wird, ja auch erstmal laufen.
maniac103 ist offline   Mit Zitat antworten
Alt 07.04.2011, 19:05   #3 (permalink)
Android-Hilfe.de Mitglied

Modell: Nexus One

Registriert seit: 06.03.2011
Beiträge: 111
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Standard AW: Aktuelle CallLogs ausgeben

Ok, guter Ansatz.
Hab's mit dem Thread versucht.

Code:
              switch(state){
                  case TelephonyManager.CALL_STATE_IDLE:
                      Log.d(TAG, "Phone is in idle state.");
                try {
                    Thread.sleep(5000);
                      CollectAndSaveLogs();                    
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                      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;
              }
Geht aber immer noch nicht..

Geändert von sem_thesis (07.04.2011 um 20:18 Uhr)
sem_thesis ist offline   Mit Zitat antworten
Alt 08.04.2011, 11:12   #4 (permalink)
Android Experte

Registriert seit: 24.01.2011
Beiträge: 637
Abgegebene Danke: 5
Erhielt 572 Danke für 228 Beiträge
Standard AW: Aktuelle CallLogs ausgeben

Zitat:
Zitat von sem_thesis Beitrag anzeigen
Ok, guter Ansatz.
Hab's mit dem Thread versucht.

Code:
              switch(state){
                  case TelephonyManager.CALL_STATE_IDLE:
                      Log.d(TAG, "Phone is in idle state.");
                try {
                    Thread.sleep(5000);
                      CollectAndSaveLogs();                    
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                      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;
              }
Geht aber immer noch nicht..
Ja klar, damit hast du ja auch nur den Thread, der die Notifications verteilt, aufgehalten, aber nicht dafür gesorgt, dass die Datenbankeinträge schon mal passieren können.

Stichworte (du willst ja für deine Semesterarbeit auch noch was lernen ) sind AlarmManager und PendingIntent. Die eigentliche Arbeit (Datenbankabfrage, Eintragen der Daten in deine Datenbank) solltest du ohnehin mit einem (Intent-)Service abhandeln (in einem Receiver sollte man nix tun, was lange dauert), und diesen Service kannst du dann über den Intent aufrufen.
maniac103 ist offline   Mit Zitat antworten
Alt 08.04.2011, 13:23   #5 (permalink)
Android-Hilfe.de Mitglied

Modell: Nexus One

Registriert seit: 06.03.2011
Beiträge: 111
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Standard AW: Aktuelle CallLogs ausgeben

Hmm... ok ich hatte schon einen BroadcastReceiver, der den Sercice aktiviert, falls der User das so gewünscht hat.
Dann muss ich also einen zweiten Receiver einabauen?

Ok, ich hab's jetzt so gemacht:

1) ServiceEnabler.java: Die Klasse, die den Service aktiviert, falls dies vom User so gewünscht ist.
Code:
public class ServiceEnabler extends BroadcastReceiver {
    
    private static final String TAG = ServiceEnabler.class.getSimpleName();
    boolean prefPhone = true;
    
    
    @Override
    public void onReceive(Context context, Intent intent) 
    {
            if (prefPhone) {
                  Log.d(TAG, "Service is activated!");
                  Intent p = new Intent();
                p.setAction("com.example.mylog.PhoneServiceReceiver");
                context.startService(p);
            }
    }
    
}
2) PhoneServiceReceiver.java: Dies ist die Service-Klasse welche einen Listener erstellt und danach implementiert. Der eigentliche PhoneService wird als PendingIntent mit dem Alarmmanger zur Zeit "SystemClock.elapsedRealtime() + sleep" aufgerufen.

Code:
public class PhoneServiceReceiver extends Service {
    
    // Log-Tag for debugging
    private static final String TAG = PhoneService.class.getSimpleName();

    // Create Telephony + Listener variables
    public TelephonyManager telephony;
    public MyPhoneServiceListener phoneListener;
    
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    
    @Override
    public void onCreate() {
        super.onCreate();
        
           // Put a Listener on the Phone-State

        telephony = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        phoneListener = new MyPhoneServiceListener();
        telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
        
    }
    
    
    private class MyPhoneServiceListener 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.");
                      
                      // Hier comes the actual Service-Functionality
                      
                      Intent pService = new Intent();
                    pService.setAction("com.example.mylog.PhoneService");

                      int sleep = 5000; // Waiting time before Log-database is accessed
                      int flags = 0;
                      
                      PendingIntent piSync = PendingIntent.getService(getBaseContext(), 0, pService, flags);
                      Log.i(TAG, "schedulePendingSync: " + piSync.toString());
                      AlarmManager alarm = (AlarmManager) getBaseContext().getSystemService(Activity.ALARM_SERVICE);
                      alarm.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + sleep, piSync);

                      // Endof Service-Functionality

                      
                      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;
          }
           
      }

    }
    
}
3) PhoneService.java: Die eigentliche Service Klasse - liest Logs und schreibt sie in eine Datenbank (enthält 3 Formattierungsfunktionen für Zeit/Datum/Dauer/Typ)
Code:
public class PhoneService extends Service {
    
    private static final String TAG = PhoneService.class.getSimpleName();
    public DBAdapter db;


    
    // Specify formatting of data and time --> looks awesome :D
    SimpleDateFormat formatDate = new SimpleDateFormat("dd-MM-yyyy");
    SimpleDateFormat formatTime = new SimpleDateFormat("HH:mm:ss");
    
    
    // Specify formatting for duration --> looks even more awesome :D    
    public String formatDuration(String input) {
        
        long seconds = Long.parseLong(input);
        StringBuffer buf = new StringBuffer();
        Log.d(TAG, input);

        int h = (int) Math.floor(seconds / 3600);
        int m = (int) Math.floor((seconds - h * 3600) / 60);
        int s = (int) seconds - h - m;

        buf
            .append(String.format("%02d", h))
            .append(":")
            .append(String.format("%02d", m))
            .append(":")
            .append(String.format("%02d", s));

        return buf.toString();
    }    
    
    // Specify interpretation of Calltype
    public String callType(int t)    {
        
        if (t == 0)            return "Outgoing Call";
        else if (t == 1)    return "Incoming Call";
        else if (t == 2)    return "Missed Call";
        return null;

    }
    
    
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    
    @Override
    public void onCreate() {
        super.onCreate();
            
          // Create Database
        db = new DBAdapter(getApplicationContext());
        
        
        // 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();
        int e;
        
        
        
        // Collect new Phone Logs //
      
        Cursor c = getContentResolver().query(
                   android.provider.CallLog.Calls.CONTENT_URI,
                   null,
                   null,
                   null,
                   android.provider.CallLog.Calls.DATE + " ASC");
        
        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);
            e = c.getColumnIndex(CallLog.Calls.TYPE);
            callclassification = callType(e);
  
          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();
}
}
Oke... und Eclipse zeigt keine (Syntax-)Fehler an. Die App crasht bei einem Anruf sofort.
Wo liegt der konzeptienelle Fehler?


PS: Im AndroidManifest.xml habe ich PhoneServiceReceiver und PhoneService als Services und ServiceEnabler als Receiver eingetragen. Muss ich sonst was eintragen?
Angehängte Dateien
Dateityp: zip MyCallLog.zip (62,4 KB, 5x aufgerufen)

Geändert von sem_thesis (08.04.2011 um 14:19 Uhr)
sem_thesis ist offline   Mit Zitat antworten
Alt 08.04.2011, 15:23   #6 (permalink)
Android Experte

Registriert seit: 24.01.2011
Beiträge: 637
Abgegebene Danke: 5
Erhielt 572 Danke für 228 Beiträge
Standard AW: Aktuelle CallLogs ausgeben

Zitat:
Zitat von sem_thesis Beitrag anzeigen
2) PhoneServiceReceiver.java: Dies ist die Service-Klasse welche einen Listener erstellt und danach implementiert. Der eigentliche PhoneService wird als PendingIntent mit dem Alarmmanger zur Zeit "SystemClock.elapsedRealtime() + sleep" aufgerufen.
Der Service-Teil davon sieht mir überflüssig aus ... warum registrierst du den Listener nicht direkt im Manifest (halt nicht als PhoneStateListener, sondern als BroadcastReceiver auf android.intent.action.PHONE_STATE)?

Zitat:
Code:
                      Intent pService = new Intent();
                    pService.setAction("com.example.mylog.PhoneService");

                      int sleep = 5000; // Waiting time before Log-database is accessed
                      int flags = 0;
                      
                      PendingIntent piSync = PendingIntent.getService(getBaseContext(), 0, pService, flags);
                      Log.i(TAG, "schedulePendingSync: " + piSync.toString());
                      AlarmManager alarm = (AlarmManager) getBaseContext().getSystemService(Activity.ALARM_SERVICE);
                      alarm.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + sleep, piSync);
Sieht soweit ok aus. Den Intent würde ich aber so initialisieren:
Code:
Intent pService = new Intent(context, PhoneService.class);
Zitat:
Oke... und Eclipse zeigt keine (Syntax-)Fehler an. Die App crasht bei einem Anruf sofort.
Wo liegt der konzeptienelle Fehler?
Es wäre hilfreich, wenn du den Backtrace (aus dem Logcat) posten könntest
maniac103 ist offline   Mit Zitat antworten
Alt 08.04.2011, 16:38   #7 (permalink)
Android-Hilfe.de Mitglied

Modell: Nexus One

Registriert seit: 06.03.2011
Beiträge: 111
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Standard AW: Aktuelle CallLogs ausgeben

Jetzt habe ich die folgende Fehlermeldung bekommen
Zitat:
E/AndroidRuntime( 1063): FATAL EXCEPTION: main
E/AndroidRuntime( 1063): java.lang.RuntimeException: Unable to create service com.example.mylog.PhoneService: java.lang.NullPointerException: println needs a message
E/AndroidRuntime( 1063): at android.app.ActivityThread.handleCreateService(Act ivityThread.java:1955)
E/AndroidRuntime( 1063): at android.app.ActivityThread.access$2500(ActivityThr ead.java:117)
E/AndroidRuntime( 1063): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:985)
E/AndroidRuntime( 1063): at android.os.Handler.dispatchMessage(Handler.java:99 )
E/AndroidRuntime( 1063): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 1063): at android.app.ActivityThread.main(ActivityThread.jav a:3683)
E/AndroidRuntime( 1063): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1063): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 1063): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:839)
E/AndroidRuntime( 1063): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:597)
E/AndroidRuntime( 1063): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1063): Caused by: java.lang.NullPointerException: println needs a message
E/AndroidRuntime( 1063): at android.util.Log.println_native(Native Method)
E/AndroidRuntime( 1063): at android.util.Log.d(Log.java:137)
E/AndroidRuntime( 1063): at com.example.mylog.PhoneService.onCreate(PhoneServi ce.java:110)
E/AndroidRuntime( 1063): at android.app.ActivityThread.handleCreateService(Act ivityThread.java:1945)
E/AndroidRuntime( 1063): ... 10 more
CallClassification wird gar nicht geloggt!
Es werden immer noch die alte Nummer/Name/Dauer im Log angezeigt.

Geändert von sem_thesis (08.04.2011 um 16:44 Uhr)
sem_thesis ist offline   Mit Zitat antworten
Alt 08.04.2011, 16:40   #8 (permalink)
Android-Hilfe.de Mitglied

Modell: Nexus One

Registriert seit: 06.03.2011
Beiträge: 111
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Standard AW: Aktuelle CallLogs ausgeben

Zitat:
Zitat von maniac103 Beitrag anzeigen
Der Service-Teil davon sieht mir überflüssig aus ... warum registrierst du den Listener nicht direkt im Manifest (halt nicht als PhoneStateListener, sondern als BroadcastReceiver auf android.intent.action.PHONE_STATE)?
Verstehe nicht ganz was du meinst.

Das Manifest-File sieht bei mir so aus:
Code:
......
       <!-- Service Declaration Area -->
        
        <service android:name ="com.example.mylog.PhoneServiceReceiver">
            <intent-filter>
                <action android:name="com.example.mylog.PhoneServiceReceiver">
                </action>
            </intent-filter>
        </service>
 
         <service android:name ="com.example.mylog.PhoneService">
            <intent-filter>
                <action android:name="com.example.mylog.PhoneService">
                </action>
            </intent-filter>
        </service>
               
        <!-- Receiver Declaration Area -->
        
        <receiver android:name=".ServiceEnabler">
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE"/>
            </intent-filter>
        </receiver>

    </application>
sem_thesis ist offline   Mit Zitat antworten
Alt 09.04.2011, 12:27   #9 (permalink)
Android-Hilfe.de Mitglied

Modell: Nexus One

Registriert seit: 06.03.2011
Beiträge: 111
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Standard AW: Aktuelle CallLogs ausgeben

Hello again!

Ich hab' einen ganz dummen Fehler im Code entdeckt, aus dem ich nicht schlau werden:

Code:
    // Specify interpretation of Call-Type
    public String callType(String t)    {
        
        String g = null;

        if (t == "1")    g = "Incoming Call";
        if (t == "2")    g = "Outgoing Call";
        if (t == "3")    g = "Missed Call";

        return g;
    }




public onStartCommand(Intent intent, int flags, int startId) {

        // Collect new Phone Logs //
          
        Cursor c = getContentResolver().query(
                       android.provider.CallLog.Calls.CONTENT_URI,
                       null,
                       null,
                       null,
                       android.provider.CallLog.Calls.DATE+ " DESC");
         c.moveToFirst();

         String t = c.getString(c.getColumnIndex(CallLog.Calls.TYPE));
         String callclassification = callType(t);


         // Log new Phone Logs

          Log.d(TAG, callclassification);



return startId;
}

Der Log wird nicht ausgeführt - was ist an der convertType Funktion falsch gelaufen?

Referenz: http://developer.android.com/referen...Log.Calls.html

Geändert von sem_thesis (09.04.2011 um 13:32 Uhr)
sem_thesis ist offline   Mit Zitat antworten
Alt 09.04.2011, 21:18   #10 (permalink)
Android-Hilfe.de Mitglied

Modell: Nexus One

Registriert seit: 06.03.2011
Beiträge: 111
Abgegebene Danke: 14
Erhielt 0 Danke für 0 Beiträge
Standard AW: Aktuelle CallLogs ausgeben

Ok, habe das Problem selber gelöst (ist ja eine Semesterarbeit, also muss ich ja selber auch was tun

string == string vergleicht anscheinend Objekte, aber keine String.

Ich habe die Funktion convertType folgendermassen umgeschrieben:

Code:
    // Specify interpretation of Call-Type
       public String callType(String t)    {
        
        String g = null;

        if ("1".equals(t))    g = "Incoming Call";
        else if ("2".equals(t))    g = "Outgoing Call";
        else if ("3".equals(t))    g = "Missed Call";

        return g;   
    }
sem_thesis ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
tv per 3,5 mm klinke ausgeben? Ratman Samsung Galaxy Tab Forum 15 07.11.2011 13:11
Text ausgeben themerx Android App Entwicklung 3 04.03.2011 12:19
2.2 als 2.1 ausgeben abbot Samsung Galaxy 3 (I5800) Forum 20 13.12.2010 11:23
nur toasti ausgeben Sico Android App Entwicklung 5 22.05.2010 15:17
Bookmarks ausgeben SeraphimSerapis Android App Entwicklung 0 24.11.2009 15:32




Du liest gerade: "Aktuelle CallLogs ausgeben" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.