9

最後にダイヤルした番号の通話時間を取得する最も簡単な方法を探しています。したがって、たとえば、電話を切ってから母親に電話をかけた場合、持続時間の通知が表示されます。

私は以下を試していますが、問題は期間の完全なリストが付属していることです。着信、発信、逃した。

どうすれば区別できますか:

私は次のことを試しました:

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

9 に答える 9

6

これは私のコードであり、最後の発信呼び出しに対して完全に正常に機能します。

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

}
于 2016-02-19T14:54:26.920 に答える
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();
        }
于 2014-02-06T07:18:13.837 に答える
1

このコードは、私が使用した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;
}
于 2015-12-28T02:03:22.857 に答える