当前位置: 移动技术网 > 移动技术>移动开发>Android > Android 通话记录,短信记录粘出来可以直接用

Android 通话记录,短信记录粘出来可以直接用

2020年07月09日  | 移动技术网移动技术  | 我要评论
public class CallLogUtils { private Uri callUri = CallLog.Calls.CONTENT_URI; private String[] columns = {CallLog.Calls.CACHED_NAME// 通话记录的联系人 , CallLog.Calls.NUMBER// 通话记录的电话号码 , CallLog.Calls.DATE// 通话记录的日期 , .
public class CallLogUtils {

    private Uri callUri = CallLog.Calls.CONTENT_URI;
    private String[] columns = {CallLog.Calls.CACHED_NAME// 通话记录的联系人
            , CallLog.Calls.NUMBER// 通话记录的电话号码
            , CallLog.Calls.DATE// 通话记录的日期
            , CallLog.Calls.DURATION// 通话时长
            , CallLog.Calls.TYPE};// 通话类型}
    CallLogBean callLogBean = new CallLogBean();
    List<CallLogBean> logs = new ArrayList<>();
    private static final String TAG = "call_log";

    public List<CallLogBean> getContentCallLog(Context context) {
//        between date('now', "-1 month") and date('now')
        String where = " date between date(\"now\", \"-1 month\") and date(\"now\")";
        Cursor cursor = context.getContentResolver().query(callUri, // 查询通话记录的URI
                columns
                , null, null, CallLog.Calls.DEFAULT_SORT_ORDER// 按照时间逆序排列,最近打的最先显示
        );

        Log.i(TAG, "cursor count:" + cursor.getCount());
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));  //姓名
            String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));  //号码
            long dateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)); //获取通话日期
            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
            String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(dateLong));
            int duration = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION));//获取通话时长,值为多少秒
            int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)); //获取通话类型:1.呼入2.呼出3.未接

            long l = dateDiff(date, time, "yyyy-MM-dd HH:mm:ss");
            if (l < 30) {
                if (name != null) {
                    callLogBean = new CallLogBean();
                    callLogBean.setName(name);
                    callLogBean.setPhone(number);
                    callLogBean.setCall_time(date);
                    callLogBean.setDuration_time(duration);
                    callLogBean.setIn_out(type);
                    logs.add(callLogBean);
                } else {
                    callLogBean = new CallLogBean();
                    callLogBean.setName(number);
                    callLogBean.setPhone(number);
                    callLogBean.setCall_time(date);
                    callLogBean.setDuration_time(duration);
                    callLogBean.setIn_out(type);
                    logs.add(callLogBean);
                }
                Log.i(TAG, "Call log: " + "\n"
                        + "name: " + name + "\n"
                        + "phone number: " + number + "\n" +
                        "dateLong :" + dateLong + "\n"

                );
            }

        }
        cursor.close();
        return logs;
    }

    //**************授权信息
    private void getPersimmionInfo(Activity context) {
        if (Build.VERSION.SDK_INT >= 23) {
            //1. 检测是否添加权限   PERMISSION_GRANTED  表示已经授权并可以使用
            if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
                //手机为Android6.0的版本,权限未授权去i请授权
                //2. 申请请求授权权限
                //1. Activity
                // 2. 申请的权限名称
                // 3. 申请权限的 请求码
                ActivityCompat.requestPermissions(context, new String[]
                        {Manifest.permission.READ_CALL_LOG, Manifest.permission.WRITE_APN_SETTINGS,
                                Manifest.permission.READ_EXTERNAL_STORAGE//通话记录
                        }, 1005);
            }

        }

    }

    public long dateDiff(String endTime, String startTime, String format) {
        // 按照传入的格式生成一个simpledateformate对象
        SimpleDateFormat sd = new SimpleDateFormat(format);
        long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
        long nh = 1000 * 60 * 60;// 一小时的毫秒数
        long nm = 1000 * 60;// 一分钟的毫秒数
        long ns = 1000;// 一秒钟的毫秒数
        long diff;
        long day = 0;
        try {
            // 获得两个时间的毫秒时间差异
            diff = sd.parse(endTime).getTime()
                    - sd.parse(startTime).getTime();
            day = diff / nd;// 计算差多少天
            long hour = diff % nd / nh;// 计算差多少小时
            long min = diff % nd % nh / nm;// 计算差多少分钟
            long sec = diff % nd % nh % nm / ns;// 计算差多少秒
            // 输出结果
//            System.out.println("时间相差:" + day + "天" + hour + "小时" + min
//                    + "分钟" + sec + "秒。");
            if (day >= 1) {
                return day;
            } else {
                if (day == 0) {
                    return 1;
                } else {
                    return 0;
                }

            }

        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

    private Uri SMS_INBOX = Uri.parse("content://sms/");

    public List<SmsBean> getSmsFromPhone(Context context) {
        ContentResolver cr = context.getContentResolver();
        List<SmsBean> smsBeanList = new ArrayList<>();
        //between date('now', "-1 month") and date('now')
        String[] projection = new String[]{"_id","body", "address", "person", "date", "type"};//"_id", "address", "person",, "date", "type
//        String where = " date >  "
//                + (System.currentTimeMillis() - 10 * 60 * 1000);
        Cursor cur = cr.query(SMS_INBOX, projection, null, null, "date desc");

        if (null == cur) {
            Log.i("ooc", "************cur == null");
            return smsBeanList;
        }

        while (cur.moveToNext()) {
            String number = cur.getString(cur.getColumnIndex("address"));//手机号
            String name = cur.getString(cur.getColumnIndex("person"));//联系人姓名列表
            String body = cur.getString(cur.getColumnIndex("body"));//内容
            long time = cur.getLong(cur.getColumnIndex("date"));//时间
            String type = cur.getString(cur.getColumnIndex("type"));//类型

            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());//当前时间
            String dateLong = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time));

            long l = dateDiff(date, dateLong, "yyyy-MM-dd HH:mm:ss");
            if (l < 30) {
                Log.i(TAG, "Call log: " + "\n"
                        + "name: " + name + "\n"
                        + "phone number: " + number + "\n" +
                        "body" + body + "\n"

                );
//
                if (name != null) {
                    SmsBean smsBean = new SmsBean();
                    smsBean.setSms_phone(number);
                    smsBean.setSms_name(name);
                    smsBean.setSms_content(body);
                    smsBean.setSms_time(dateLong);
                    smsBean.setSms_status(type);
                    smsBeanList.add(smsBean);
                } else {
                    SmsBean smsBean = new SmsBean();
                    smsBean.setSms_phone(number);
                    smsBean.setSms_name(number);
                    smsBean.setSms_content(body);
                    smsBean.setSms_time(dateLong);
                    smsBean.setSms_status(type);
                    smsBeanList.add(smsBean);
                }
            }
        }
        cur.close();
        return smsBeanList;
    }

    public static String[] getNewPhoneContacts(Activity mActivity, Uri uri) {
        String[] contact = new String[2];
        try {
            // 创建内容解析者
            ContentResolver contentResolver = mActivity.getContentResolver();
            Cursor cursor = null;
            String phoneNum = null;
            String contactName = null;
            if (uri != null) {
                cursor = contentResolver.query(uri, new String[]{"display_name", "data1"}, null, null, null);
            } else {

            }
            while (cursor.moveToNext()) {
                contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                phoneNum = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            }
            cursor.close();
            if (phoneNum != null && !phoneNum.isEmpty()) {
                if (phoneNum.contains(" ")) {
                    phoneNum = phoneNum.replace(" ", "");
                }
                if (phoneNum.contains("-")) {
                    phoneNum = phoneNum.replace("-", "");
                }
                if (phoneNum.contains("+63")) {
                    phoneNum = phoneNum.replace("+63", "0");
                }
                if (phoneNum.length() < 9) {
                    if (phoneNum.contains("+")) {
                        phoneNum = phoneNum.replace("+", "");
                    }
                }
                String startOne = phoneNum.substring(0, 1);
                if ("9".equals(startOne)) {
                    phoneNum = "0" + phoneNum;
                } else {


                }
                contact[0] = contactName;
                contact[1] = phoneNum;
            }
            return contact;

        } catch (Exception e) {
            e.fillInStackTrace();
        }
        return contact;
    }


}

本文地址:https://blog.csdn.net/weixin_41194750/article/details/107175121

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网