【问题标题】:How to get the Call Log data between two dates and Total number of incoming an outgoing calls between the dates如何获取两个日期之间的通话记录数据以及日期之间的来电总数
【发布时间】:2016-11-23 13:05:50
【问题描述】:

我想获取今天、昨天、过去 7 天和过去 30 天的通话记录历史记录,以及我想显示该特定号码的来电和去电的总持续时间。 我尝试了各种类型,但没有一个工作。我应该怎么做才能得到输出?。我不知道如何使用查询来获取特定日期的通话记录。帮帮我谢谢

公共类 CallLogActivity 扩展 Activity {

TextView textView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_call_log);
    textView = (TextView) findViewById(R.id.textCallBetween);
    textView.setVisibility(View.GONE);
   // listcallLog = (ListView) findViewById(R.id.calllogItems);

    getCalldetails();


}

public void getCalldetails() {
    StringBuffer stringBuffer = new StringBuffer();

    String strOrder = android.provider.CallLog.Calls.DATE + " DESC";

    Calendar calender = Calendar.getInstance();

    calender.set(2016, calender.NOVEMBER, 18);
    String fromDate = String.valueOf(calender.getTime());

    calender.set(2016, Calendar.NOVEMBER, 20);
    String toDate = String.valueOf(calender.getTimeInMillis());

    String[] whereValue = {fromDate,toDate};


    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    Cursor managedCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, android.provider.CallLog.Calls.DATE + " BETWEEN ? AND ?", whereValue, strOrder);

//   Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, android.provider.CallLog.Calls.DATE, new String[]{" BETWEEN ? AND ?"}, strOrder);
    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);

    stringBuffer.append("Call Log :");

    while (managedCursor.moveToNext())
    {
        String phoneNumber = managedCursor.getString(number);
        String callType = managedCursor.getString(type);
        String callDate = managedCursor.getString(date);
        SimpleDateFormat formatter = new SimpleDateFormat(
                "dd-MMM-yyyy HH:mm");
        String dateString = formatter.format(new Date(Long
                .parseLong(callDate)));
      //  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 = "INCOMMING";
                break;
            case CallLog.Calls.MISSED_TYPE:
                dir = "MISSED CALL";
                break;

        }

        stringBuffer.append("\nPhone Number:--- " + phoneNumber + "\nCall Type:--- "
                + dir + "\nCall Date:---"
                + dateString + "\nCall Duration:---" + callDuration);
        stringBuffer.append("\n--------------------------");

    }

    textView.setText(stringBuffer);
    textView.setVisibility(View.VISIBLE);

}`

}

【问题讨论】:

  • 您是否正在获取所有通话记录数据?
  • 不,我无法获取通话记录数据。
  • 行中 String fromDate = String.valueOf(calender.getTime());不应该是calender.getTimeInMillis()吗?
  • 我改变了上面的行,但我无法得到输出@Volodymyr Baydalka

标签: java android sql


【解决方案1】:

以下代码是获取两个日期之间的通话记录数据的解决方案。

public class CallLogActivity extends Activity {


TextView textView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_call_log);
    textView = (TextView) findViewById(R.id.textCallBetween);
    textView.setVisibility(View.GONE);
   // listcallLog = (ListView) findViewById(R.id.calllogItems);

    getCalldetails();


}

public void getCalldetails() {
    StringBuffer stringBuffer = new StringBuffer();

    String strOrder = android.provider.CallLog.Calls.DATE + " DESC";

    Calendar calender = Calendar.getInstance();


    calender.set(2016, calender.NOVEMBER, 18);
    String fromDate = String.valueOf(calender.getTimeInMillis());

    calender.set(2016, calender.NOVEMBER, 20);
    String toDate = String.valueOf(calender.getTimeInMillis());

    String[] whereValue = {fromDate,toDate};


    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    Cursor managedCursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, android.provider.CallLog.Calls.DATE + " BETWEEN ? AND ?", whereValue, strOrder);

//   Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, android.provider.CallLog.Calls.DATE, new String[]{" BETWEEN ? AND ?"}, strOrder);
    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);

    stringBuffer.append("Call Log :");

    while (managedCursor.moveToNext())
    {
        String phoneNumber = managedCursor.getString(number);
        String callType = managedCursor.getString(type);
        String callDate = managedCursor.getString(date);
        SimpleDateFormat formatter = new SimpleDateFormat(
                "dd-MMM-yyyy HH:mm");
        String dateString = formatter.format(new Date(Long
                .parseLong(callDate)));
      //  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 = "INCOMMING";
                break;
            case CallLog.Calls.MISSED_TYPE:
                dir = "MISSED CALL";
                break;

        }

        stringBuffer.append("\nPhone Number:--- " + phoneNumber + "\nCall Type:--- "
                + dir + "\nCall Date:---"
                + dateString + "\nCall Duration:---" + callDuration);
        stringBuffer.append("\n--------------------------");

    }

    textView.setText(stringBuffer);
    textView.setVisibility(View.VISIBLE);

}

}

【讨论】:

    【解决方案2】:

    一步一步来。首先以这种方式获取所有通话记录。

    Uri allCalls = Uri.parse("content://call_log/calls");
    Cursor c = managedQuery(allCalls, null, null, null, null);
    
    String num= c.getString(c.getColumnIndex(CallLog.Calls.NUMBER));// for  number
    String name= c.getString(c.getColumnIndex(CallLog.Calls.CACHED_NAME));// for name
    String duration = c.getString(c.getColumnIndex(CallLog.Calls.DURATION));// for duration
    int type = Integer.parseInt(c.getString(c.getColumnIndex(CallLog.Calls.TYPE)));// for call type, Incoming or out going.
    

    【讨论】:

    • 别忘了添加
    • 接下来就是以不同的方式查询光标,获取两个日期之间的通话记录,String strOrder1 = android.provider.CallLog.Calls.DATE + "DESC limit 500"; Uri callUri = Uri.parse("content://call_log/calls");光标 cur = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, android.provider.CallLog.Calls.DATE + " BETWEEN ? AND ?", whereValue, strOrder1);
    • 我做了那个改变,但我只能得到通话记录作为输出@Radhey
    • 您是否在 6.0 及更高版本上测试您的应用?
    • 不知道怎么初始化whereValue
    猜你喜欢
    • 2019-03-14
    • 2011-08-12
    • 2020-03-02
    • 2019-05-07
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多