获取通话记录中的Deprecated ManagedQuery()问题

5

我有一个方法,想要获取手机通话记录,但由于被弃用的ManagedQuery()方法,无法实现。请帮忙修改以满足我的需要。

private void 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);
        sb.append("Call Log :");
        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;
            }

            sb.append("\nPhone Number:--- " + phNumber +
                    " \nCall Type:--- " + dir +
                    " \nCall Date:--- " + callDayTime +
                    " \nCall duration in sec :--- " +
                    callDuration);
            sb.append("\n----------------------------------");

        }
        managedCursor.close();
        textView.setText(sb);
    }

很不幸,编译器在以下位置显示了一个问题:

Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null,       null, null, null);

因为managedQuery()已经过时了。

我该如何重写这个方法以避免使用managedQuery()?


但是由于已弃用的ManagedQuery(),我无法获得它。那么你读过ManagedQuery文档了吗?他们有没有说要使用什么替代方法? - pskink
是的,他们建议使用CursorLoader,但我没有找到任何关于如何使用CursorLoader访问通话记录的信息。 - Sangeeta
所以,如果要使用CursorLoader,请阅读Javadocs、指南、教程等。 - pskink
3个回答

3
您可以将您的managedQuery替换为以下内容:
Cursor managedCursor = getContentResolver().query(
                CallLog.Calls.CONTENT_URI, null, null, null, null);

2

1
根据字符串更新您的用户界面。
      String[] details = new String[]{CallLog.Calls.NUMBER,
                    CallLog.Calls.TYPE,
                    CallLog.Calls.DURATION,
                    CallLog.Calls.CACHED_NAME,
                    CallLog.Calls._ID};

            Cursor cursor;

            cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, details, null, null, CallLog.Calls._ID + " DESC");
            if(cursor.getCount()!=0){
                cursor.moveToFirst();
                String number = cursor.getString(0);
                String type=cursor.getString(1);
                String duration=cursor.getString(2);
                String name=cursor.getString(3);
                String id=cursor.getString(4);
                String dir = null;



                switch (Integer.parseInt(type)) {
                    case CallLog.Calls.OUTGOING_TYPE:
                        dir = "OUTGOING";
                        break;

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

            }
            cursor.close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接