2015-12-17 12 views
5

Ho un metodo in cui sto cercando di ottenere i registri delle chiamate di un telefono. ma a causa di deprecato ManagedQuery() non sono in grado di ottenere quello. Si prega di aiutare come posso modificare quello per soddisfare le mie esigenze.Problema di ManagedQuery() deprecato nell'ottenere i registri delle chiamate

private void getCallDetails() { 
     StringBuffer sb = new StringBuffer(); 
     Cursor managedCursor = managedQuery(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 Log :"); 
     while (managedCursor.moveToNext()) { 
      String phNumber = managedCursor.getString(number); 
      String callType = managedCursor.getString(type); 
      String callDate = managedCursor.getString(date); 
      Date callDayTime = new Date(Long.valueOf(callDate)); 
      String callDuration = managedCursor.getString(duration); 
      String dir = null; 
      int dircode = Integer.parseInt(callType); 
      switch (dircode) { 
       case CallLog.Calls.OUTGOING_TYPE: 
        dir = "OUTGOING"; 
        break; 

       case CallLog.Calls.INCOMING_TYPE: 
        dir = "INCOMING"; 
        break; 
       case CallLog.Calls.MISSED_TYPE: 
        dir = "MISSED"; 
        break; 
      } 

      sb.append("\nPhone Number:--- " + phNumber + 
        " \nCall Type:--- " + dir + 
        " \nCall Date:--- " + callDayTime + 
        " \nCall duration in sec :--- " + 
        callDuration); 
      sb.append("\n----------------------------------"); 

     } 
     managedCursor.close(); 
     textView.setText(sb); 
    } 

Purtroppo il compilatore mi mostrano un problema su:

Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null,  null, null, null); 

Perché managedQuery() è deprecato.

Come posso riscrivere questo metodo senza utilizzare managedQuery()?

+0

'ma a causa di deprecato ManagedQuery() non sono in grado di ottenere quello. Così hai letto i documenti' ManagedQuery'? dicono qualcosa su cosa usare invece di 'ManagedQuery'? – pskink

+0

sì, hanno suggerito di usare cursorLoader ma non ho trovato nulla come posso accedere ai registri delle chiamate usando cursorLoader – Sangeeta

+0

quindi usare 'CursorLoader' leggere javadocs, guide, tutorial ecc. – pskink

risposta

1

Fare l'aggiornamento dell'interfaccia utente dalle corde di conseguenza ..

 String[] details = new String[]{CallLog.Calls.NUMBER, 
        CallLog.Calls.TYPE, 
        CallLog.Calls.DURATION, 
        CallLog.Calls.CACHED_NAME, 
        CallLog.Calls._ID}; 

      Cursor cursor; 

      cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, details, null, null, CallLog.Calls._ID + " DESC"); 
      if(cursor.getCount()!=0){ 
       cursor.moveToFirst(); 
       String number = cursor.getString(0); 
       String type=cursor.getString(1); 
       String duration=cursor.getString(2); 
       String name=cursor.getString(3); 
       String id=cursor.getString(4); 
       String dir = null; 



       switch (Integer.parseInt(type)) { 
        case CallLog.Calls.OUTGOING_TYPE: 
         dir = "OUTGOING"; 
         break; 

        case CallLog.Calls.INCOMING_TYPE: 
         dir = "INCOMING"; 
         break; 
        case CallLog.Calls.MISSED_TYPE: 
         dir = "MISSED"; 
         break; 
       } 

      } 
      cursor.close(); 
2

È possibile sostituire il managedQuery con esso:

Cursor managedCursor = getContentResolver().query(
       CallLog.Calls.CONTENT_URI, null, null, null, null); 
+0

non ha funzionato per me. :( – Sangeeta

+0

Che errore sta mostrando –

Problemi correlati