android - 如何在 Android Studio 中获取最新的通话记录?

标签 android android-cursor telephonymanager calllog

我有一个在下面工作的代码。但我不能限制它。我只想获取最近的 20 个通话记录。
但这就是我看到所有时间搜索日志的方式。

它应该只是最后的通话记录,我只需要看到 20 条。任何帮助,我将不胜感激。

My Code;


private void getCallLogs() {

        ContentResolver cr = getBaseContext().getContentResolver();
        Cursor c = cr.query(CallLog.Calls.CONTENT_URI, null, null, null, null);
        int totalCall = 1;
        if (c != null) {
            totalCall = c.getCount();
            if (c.moveToFirst()) {
                for (int j = 0; j < totalCall; j++) {

                    String callDate = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.DATE));
                    String phNumber = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
                    String callDuration = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.DURATION));
                    Date dateFormat= new Date(Long.valueOf(callDate));
                    String callDayTimes = String.valueOf(dateFormat);
                    String direction = null;

                    switch (Integer.parseInt(c.getString(c.getColumnIndexOrThrow(CallLog.Calls.TYPE)))) {
                        case Telephony.Sms.MESSAGE_TYPE_INBOX:
                            direction = "OUTGOING";
                            break;
                        case Telephony.Sms.MESSAGE_TYPE_SENT:
                            direction = "INGOING";
                            break;
                        case Telephony.Sms.MESSAGE_TYPE_OUTBOX:
                            direction = "MISSED";
                            break;
                        default:
                            break;
                    }

                    Toast.makeText(this, phNumber + direction + callDuration + callDayTimes, Toast.LENGTH_SHORT).show();
                }
            }
            c.close();
        }
    }

最佳答案

请在您的 list 文件中添加此权限。

<uses-permission android:name="android.permission.READ_CALL_LOG"/>


在你的 Activity 文件中添加这个函数并在 oncreate 函数中调用它。

 public void getCallLogs() {            
        int flag=1;
        title.setText(Html.fromHtml("<b>Call Logs</b>"));
        deviceDetails.setText(Html.fromHtml(""));
        StringBuilder callLogs = new StringBuilder();

        ArrayList<String> calllogsBuffer = new ArrayList<String>();
        calllogsBuffer.clear();
        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);
        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;
            }
            calllogsBuffer.add("\nPhone Number: " + phNumber + " \nCall Type: "
                    + dir + " \nCall Date: " + callDayTime
                    + " \nCall duration in sec : " + callDuration + "\n");

        }
        managedCursor.close();
}


要调用此函数,请将其添加到 Activity 中的 oncreate 函数中。

getCallLogs();

关于android - 如何在 Android Studio 中获取最新的通话记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57313691/

相关文章:

java - 同步内 Thread.notify() 上的 IllegalMonitorStateException

Android:从应用程序中启动 Firefox

android - 非法状态异常 : database already closed (using ViewPager)

android - 将我的应用设置为默认拨号器而不询问 Android 10 (Q) 中的选项?

android - 如何检查Android设备中是否启用了电话调用服务?

java.lang.RuntimeException : Unable to start activity, 传递给另一个 Activity

android - GridView 上的网格线

android - 为什么内容解析器在android中找到已删除的音频文件

android - Android Room 数据库的几种不同崩溃 - 不知道为什么

android - Nougat 上未调用 TelephonyManager 的 PhoneStateListener