android 使用内容提供者 获取通话记录 短信

本文介绍了一种方法来读取Android设备上的短信及通话记录。通过使用ContentResolver和对应的URI,可以从系统中获取短信内容、发送者、时间戳等信息,并且能够读取通话记录包括电话号码、通话类型、日期和时长。此方法适用于更新或同步应用程序中的联系人信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
     * 读取短信
     */
    public static List<SMS> readSMS(Context context, long lastTime) {
        ContentResolver resolver = context.getContentResolver();
        Uri uri = Uri.parse("content://sms/");
        Cursor cursor = resolver.query(uri, null, null, null, null);
        List<SMS> smsList = new ArrayList<>();
        while (cursor.moveToNext()) {
            String address = cursor.getString(cursor.getColumnIndex("address"));
            String body = cursor.getString(cursor.getColumnIndex("body"));
            long date = cursor.getLong(cursor.getColumnIndex("date"));
            String type = cursor.getString(cursor.getColumnIndex("type"));
            if (date > lastTime) {
                Log.e(TAG, "地址:" + address + "\n" + "内容:" + body + "\n" + "日期:" + date + "\n"+"type"+type+"\n");
                SMS sms = new SMS();
                sms.setAddress(address);
                sms.setBody(body);
                sms.setDate(date);
                sms.setType(type);
                smsList.add(sms);
            }
        }
        cursor.close();
        return smsList;
    }

    /**
     * 读取通话记录
     */
    public static List<Phone> readPhoneHistory(Context context, long lastTime) {
        ContentResolver cr = context.getContentResolver();
        Uri uri = CallLog.Calls.CONTENT_URI;
        String[] projection = new String[]{CallLog.Calls.NUMBER, CallLog.Calls.DATE,
                //TYPE:1接听 2拨打 3 错过
                CallLog.Calls.TYPE, CallLog.Calls.DURATION};
        if (ActivityCompat.checkSelfPermission(context, 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 null;
        }
        Cursor cursor = cr.query(uri, projection, null, null, null);
        List<Phone> phoneList = new ArrayList<>();
        while (cursor.moveToNext()) {
            String number = cursor.getString(0);
            long date = cursor.getLong(1);
            int type = cursor.getInt(2);
            int duratioin = cursor.getInt(3);
            if (date > lastTime) {
                Log.e(TAG, "手机号:" + number + "\n" + "类型:" + type + "\n" + "日期:" + date + "\n" + "时长" + duratioin + "\n");
                Phone phone = new Phone();
                phone.setDate(date);
                phone.setNumber(number);
                phone.setDuratioin(duratioin);
                phone.setType(type);
                phoneList.add(phone);
            }

        }
        cursor.close();
        return phoneList;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值