2013-10-21 7 views
6

私は最後のダイヤル番号の通話時間を取得する最も簡単な方法を探しています。たとえば、私が電話を切った後、私の母に電話をした場合、その期間の通知が出てきます。androidの最後の通話時間を取得

私は次のことを試していますが、問題はそれには完全な期間のリストが含まれていることです。着信、発信、欠落。私は次のことを試してみました

を::コードの下

private void getCallDetails() { 

    StringBuffer sb = new StringBuffer(); 
    Cursor cur = getContentResolver().query(CallLog.Calls.CONTENT_URI,null, null,null, android.provider.CallLog.Calls.DATE + " DESC"); 

    int number = cur.getColumnIndex(CallLog.Calls.NUMBER); 
    int duration = cur.getColumnIndex(CallLog.Calls.DURATION); 
    sb.append("Call Details : \n"); 
    while (cur.moveToNext()) { 
     String phNumber = cur.getString(number); 
     String callDuration = cur.getString(duration); 
     String dir = null; 

     sb.append("\nPhone Number:--- "+phNumber +" \nCall duration in sec :--- "+callDuration); 
     sb.append("\n----------------------------------"); 
    } 
    cur.close(); 
    call.setText(sb); 
} 
+0

あなたはその問題を解決しましたか?解決された場合は、plsが解決策を示すことを意味します。 –

答えて

9

てみてください。

private void getCallDetails() { 
     StringBuffer sb = new StringBuffer(); 
     Uri contacts = CallLog.Calls.CONTENT_URI; 
     Cursor managedCursor = context.getContentResolver().query(contacts, 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 :"); 
     while (managedCursor.moveToNext()) { 

      HashMap rowDataCall = new HashMap<String, String>(); 

      String phNumber = managedCursor.getString(number); 
      String callType = managedCursor.getString(type); 
      String callDate = managedCursor.getString(date); 
      String callDayTime = new Date(Long.valueOf(callDate)).toString(); 
      // long timestamp = convertDateToTimestamp(callDayTime); 
      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(); 
     System.out.println(sb); 

あなたがラインの下での入力コールを取得しますどのように私はそれを区別します

int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
+0

これは私にコールログの完全なリストを与えます。私は、通話を終了した直後に現在の通話時間を表示したいだけです。 – TheDevMan

+0

前回の通話時間は最後の通話時間ではありません。 – TheDevMan

+2

そのようなクエリから最後のエントリを見つけ出し、ループのための1つを作成し、最後のエントリだけを得る、あなたはそれを取得します。 –

2

このコードは私のために正常に動作します.......

void retriveCallSummary() { 

      Log.i("*****retriveCallSummary******","Call retrive method worked"); 
      StringBuffer sb = new StringBuffer(); 
      Uri contacts = CallLog.Calls.CONTENT_URI; 
      Cursor managedCursor = mContext.getContentResolver().query(
        contacts, null, null, null, null); 
      int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
      int duration1 = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 
      if(managedCursor.moveToFirst() == true) { 
       String phNumber = managedCursor.getString(number); 
       String callDuration = managedCursor.getString(duration1); 
       String dir = null; 
       sb.append("\nPhone Number:--- "+phNumber +" \nCall duration in sec :--- "+callDuration); 
       sb.append("\n----------------------------------"); 
        Log.i("*****Call Summary******","Call Duration is:-------"+sb); 
      } 
      managedCursor.close(); 
     } 
+0

managedCursor.moveToFirst()メソッドは、最後の呼び出しの呼び出しの詳細を取得するのに役立ちます。 – Sam

+0

managedCursor.moveToLast()は、最後の呼び出しである – longwalker

0

このコードは100%に働く私はあなたのコンテンツで制限句を使用する必要が

public String LastCall() { 
     StringBuffer sb = new StringBuffer(); 
     Cursor cur = getContentResolver().query(CallLog.Calls.CONTENT_URI,null, null,null, android.provider.CallLog.Calls.DATE + " DESC"); 

     int number = cur.getColumnIndex(CallLog.Calls.NUMBER); 
     int duration = cur.getColumnIndex(CallLog.Calls.DURATION); 
     sb.append("Call Details : \n"); 
     while (cur.moveToNext()) { 
      String phNumber = cur.getString(number); 
      String callDuration = cur.getString(duration); 
      sb.append("\nPhone Number:"+phNumber); 
      break; 
     } 
    cur.close(); 
    String str=sb.toString(); 
    return str; 
} 
+0

を取得する正しい方法です。最後の呼び出しの詳細が2番目に表示されます。 – sanjay

6

を使用最後のコールの詳細を取得するためのクエリ。 だからあなたのコンテンツクエリは

Cursor cur = getContentResolver().query(CallLog.Calls.CONTENT_URI,null, null,null, android.provider.CallLog.Calls.DATE + " DESC limit 1;"); 
+0

try catch例外でこの行を追加しました。 – VyTcdc

2

これは私のコードで、最後の発信コールのために完全に正常に動作となります。

private String 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); 

    managedCursor.moveToLast(); 
     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; 
     } 

    if(dir.equals("OUTGOING")){ 
     //whatever you want here 
     return "yes"; 
    } 

    managedCursor.close(); 
    return "no"; 

} 
0

最後の通話時間を取得するためのコードです。試してみてください。最後の通話時間は通話ログから取得されます。 TheDevMan @

public void getCallLog() { 
    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 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); 
     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: 
       // lastPosition = currentCount; 
       dir = "OUTGOING"; 
       break; 

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

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

     } 
     lastPosition = currentCount; 
     sb.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " + callDayTime + " \nCall duration in sec :--- " + callDuration); 
     sb.append("\n----------------------------------"); 
     Log.e("test", sb.toString()); 
    } 

    lastPosition--; 
    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); 

    textView.setText(phNumber); 
    textDuration.setText(dur); 
    Log.e("last position number ", phNumber); 
    Log.e("last call Duration ", dur); 
    managedCursor.close(); 
} 
0
public class Home extends Activity { 
    TextView textView = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home_activity); 
     textView = (TextView) findViewById(R.id.textview_call); 
     getCallDetails(); 
    } 

    private void getCallDetails() { 

     Context context; 
     StringBuffer sb = new StringBuffer(); 
     Uri contacts = CallLog.Calls.CONTENT_URI; 
     try { 
      Cursor managedCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI,null, null,null, android.provider.CallLog.Calls.DATE + " DESC limit 1;"); 
      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 :"); 
      while (managedCursor.moveToNext()) { 

       HashMap rowDataCall = new HashMap<String, String>(); 

       String phNumber = managedCursor.getString(number); 
       String callType = managedCursor.getString(type); 
       String callDate = managedCursor.getString(date); 
       String callDayTime = new Date(Long.valueOf(callDate)).toString(); 
       // long timestamp = convertDateToTimestamp(callDayTime); 
       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(); 
      System.out.println(sb); 
      textView.setText(sb); 
     } 
     catch (SecurityException e) 
     { 
      System.out.println(); 
      // lets the user know there is a problem with the code 
     } 




    } 
} 
関連する問題