Android獲取手機(jī)通訊錄并按照時間電話類型分類處理

本文用到的RecyclerView標(biāo)題懸浮,參考連接

先看看圖片詳情:

device-2017-01-08-113015.png
device-2017-01-08-113047.png
獲取通訊錄之后按照時間.類型分類,同一號碼同一類型在當(dāng)天只出現(xiàn)一次

因?yàn)榭紤]到還有懸停的問題,RecyclerView學(xué)習(xí)(四)----城市導(dǎo)航列表的實(shí)現(xiàn)(上)中的思想是:獲取對象名字的拼音然后排序,他這樣做是為了側(cè)邊索引。因?yàn)楸疚牟⒉恍枰玫剿饕圆⒉恍枰@取拼音,只獲取每個通話的時間yyyy-MM-dd,通過比較時間(eques),這樣就可以根據(jù)懸浮的原理來實(shí)現(xiàn)日期分類
一直有個疑問:Java為什么會有eques,感覺跟牽強(qiáng)啊
我實(shí)現(xiàn)分類的思想是:因?yàn)槲也樵兺ㄔ捰涗浭前凑諘r間順序來的。

 /**
     * 獲取所有的通話記錄
     *
     * @param context
     */
    public void getCallLog(Context context) {
        try {
            callInfoLogs.clear();
            ContentResolver cr = context.getContentResolver();
            Uri uri = CallLog.Calls.CONTENT_URI;
            String[] projection = new String[]{CallLog.Calls.NUMBER, CallLog.Calls.DATE,
                    CallLog.Calls.TYPE, CallLog.Calls.CACHED_NAME, CallLog.Calls.DURATION, CallLog.Calls.GEOCODED_LOCATION};
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
            }
            Cursor cursor = cr.query(uri, projection, null, null, CallLog.Calls.DATE + " DESC");
            while (cursor.moveToNext()) {
                CallInfoLog callInfoLog = new CallInfoLog();
                String number = cursor.getString(0);//電話號碼
                long date = cursor.getLong(1);//通話時間
                int type = cursor.getInt(2);//通話類型
                String name = cursor.getString(3);//名字
                String duration = cursor.getString(4);//通話時長
                String areaCode = cursor.getString(5);//歸屬地
                String callTime = TransitionTime.convertTimeFirstStyle(date);//格式化時間yyyy-MM-dd
                if (TransitionTime.getTodayData().equals(callTime)) {//如果是今天的話
                    callInfoLog.setCallTime("今天");
                } else if (TransitionTime.getYesData().equals(callTime)) {
                    callInfoLog.setCallTime("昨天");
                } else {
                    callInfoLog.setCallTime(callTime);
                }
                callInfoLog.setNumber(number);
                callInfoLog.setDate(date);
                callInfoLog.setType(type);
                callInfoLog.setName(name);
                callInfoLog.setCountType(1);
                callInfoLog.setDuration(duration);
                callInfoLog.setCode(areaCode);
                //篩選數(shù)據(jù)
                if (TextUtils.isEmpty(number)) {
                    callInfoLogs.add(callInfoLog);
                    continue;
                }
                boolean isadd = screenData(callInfoLogs, callInfoLog);
                if (isadd) {
                    callInfoLogs.add(callInfoLog);
                }
            }
            cursor.close();
            callLogAdapter.notifyDataSetChanged();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

順便說下:
查看電話記錄---CallLog.Calls.CONTENT_URI
CallLog.Calls.CACHED_NAME查詢的聯(lián)系人名字
CallLog.Calls.TYPE電話類型,
CallLog.Calls.NUMBER電話號碼
CallLog.Calls.DATE電話日期
(注意:CallLog.Calls.TYPE電話類型的取值 來電:1,撥出:2,未接:3)

查詢出來的數(shù)據(jù)按照:cursor.moveToNext() 時都是按照最新的先獲取,所以數(shù)據(jù)篩選時都要和之前的數(shù)據(jù)對比,如果是同一號碼同一類型同一天的話就不在放入集合中,而是給已經(jīng)存在的最新的數(shù)量上+1。

    /**
     * 篩選數(shù)據(jù)
     * @param callInfoLogs
     * @param info
     * @return
     */
    private boolean screenData(ArrayList<CallInfoLog> callInfoLogs, CallInfoLog info) {
        if (callInfoLogs.size() > 0) {
            for (int i = 0; i < callInfoLogs.size(); i++) {
                CallInfoLog callInfoLog = callInfoLogs.get(i);
                //如果說是日期和類型全部一樣的話那么這個通話記錄就不要,變成一個數(shù)量歸為最近一次記錄里面
                if (callInfoLog.getCallTime().equals(info.getCallTime()) && callInfoLog.getType() == info.getType() && info.getNumber().equals(callInfoLog.getNumber())) {
                    callInfoLog.setCountType(callInfoLog.getCountType() + 1);//遞增一次
                    //結(jié)束這次數(shù)據(jù)查找
                    return false;
                }
            }
        }
        return true;
    }

以上就是重要的兩部分
源碼地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容