2015-09-29 42 views
5

Sto leggendo i registri delle chiamate dopo la fine della chiamata, in base al quale se la chiamata è connessa, la durata della chiamata è maggiore di 0. Se la durata è maggiore di 0, pianifico la prossima chiamata su quel numero dopo 2 giorni. Se la durata della chiamata è 0, pianifico la prossima chiamata su quel numero dopo 1 giorno.come leggere i registri delle chiamate una volta terminata la chiamata e archiviata nei registri?

Il mio problema è che quando la chiamata è connessa, allora è programmata correttamente, ma quando la chiamata non è connessa viene mostrato il testo precedente. A volte è corretto e talvolta non è corretto.

Apro questa attività dal ricevitore. Si prega di fornire una soluzione migliore.

seguito è il mio codice:

@Override 
protected void onResume() { 
    /** 
     * this values only set when call maked from app then it w 
     * ill set auto filled some of filled in follow up 
     * 
     */ 
    if(flag!=null && flag.equalsIgnoreCase("Followup")/*&& state!=true*/){ 
     if(SharedPrefs.getBoolean(this, SharedPrefs.PREFS_AUTH, SharedPrefs. 
      KEY_SCHEDULE_NEXT_FOLLOWUP, false)) 
      { 
      findViewById(R.id.rl_followUp).setVisibility(View.VISIBLE); 
      } else { 
      findViewById(R.id.rl_followUp).setVisibility(View.GONE); 
      } 
     getCallDetails(); 

     /* 
     String strDateFormat = "hh:mm a"; 
     SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat); 
     calendar=Calendar.getInstance(); 
     */ 
     if(callDuration > 0){ 
      tvDateText.setText(timeInMilies(2)); 
      etFUComments.setText("Call is done"); 
     } else { 
      tvDateText.setText(timeInMilies(1)); 
      etFUComments.setText(getResources(). 
       getString(R.string.call_not_connected_detail)); 
     } 
    } 
    super.onResume(); 
} 

private void getCallDetails() { 
    StringBuffer sb = new StringBuffer(); 
    String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
    /* Query the CallLog Content Provider */ 
    managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, 
      null, null, strOrder); 
    int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
    int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
    int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); 
    duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 
    sb.append("Call Log :"); 
    if (managedCursor.moveToNext()) { 
     phNum = managedCursor.getString(number); 
     String callTypeCode = managedCursor.getString(type); 
     String strcallDate = managedCursor.getString(date); 
     callDate = new Date(Long.valueOf(strcallDate)); 
     callDuration =Integer.parseInt(managedCursor.getString(duration)); 
     String callType = null; 
     int callcode = Integer.parseInt(callTypeCode); 
     switch (callcode) { 
      case CallLog.Calls.OUTGOING_TYPE: 
       callType = "Outgoing"; 
       break; 
      case CallLog.Calls.INCOMING_TYPE: 
       callType = "Incoming"; 
       break; 
      case CallLog.Calls.MISSED_TYPE: 
       callType = "Missed"; 
       break; 
     } 
    } 
    managedCursor.close(); 
} 


public String timeInMilies(int day){ 
    Date date=new Date();//(86400000*2) 
    long time= date.getTime(); 
    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(time + (86400000 * day)); 
    //etFUComments.setText(String.valueOf(formatter.format(calendar.getTime()))); 
    return String.valueOf(formatter.format(calendar.getTime())); 
} 
+0

grazie @mergenchik !! –

risposta

0

Si può dare un certo ritardo per aprire l'attività, perché dopo la chiamata si apre improvvisamente l'attività e all'interno di quel tempo non c'è il registro corrente.

Problemi correlati