如何有效地阅读所有联系人的最新短信?

时间:2018-02-04 20:11:13

标签: android

我正在尝试阅读所有联系人的最新短信,但目前我正在使用的程序似乎非常慢。我该如何改进呢?

public Map<String, SMS> getLatestMsgs(){

    Uri uriSMSURI = Uri.parse("content://sms/");
    String[] projection = {_id, address, body,
            read, date, subscriptionId, type};
    String selection = "";
    String[] selectionArgs = {};
    String sortOrder = Telephony.Sms.DATE +" desc";

    Cursor c = context.getContentResolver()
            .query(uriSMSURI, projection, selection, selectionArgs, sortOrder);
    LinkedHashMap<String, SMS> smsMap = new LinkedHashMap<>();

    log.info(methodName, "Reading Messages..");
    if(c==null){
        log.info(methodName, "Query returned null cursor");
        return smsMap;
    }

    while (c.moveToNext()) {
        String id = c.getString(c.getColumnIndexOrThrow(this._id));
        String from = c.getString(c.getColumnIndexOrThrow(this.address));
        String body = c.getString(c.getColumnIndexOrThrow(this.body));
        int serviceCenter = c.getInt(c.getColumnIndexOrThrow(this.subscriptionId));
        boolean readState = c.getInt(c.getColumnIndex(this.read)) == 1;
        long time = c.getLong(c.getColumnIndexOrThrow(this.date));
        long type = c.getLong(c.getColumnIndexOrThrow(this.type));

        if(!smsMap.containsKey(from)) {
            SMS sms = new SMS();
            sms.setId(id);
            sms.setFrom(from);
            sms.setBody(body);
            sms.setRead(readState);
            sms.setDateTime(time);
            sms.setType(type);
            sms.setSubscription(serviceCenter);

            smsMap.put(from, sms);
        }

    }
    c.close();

    return smsMap;
}

此方法包含以下步骤:

  
      
  1. 按时间戳的降序读取所有短信
  2.   
  3. 开始对提取的行进行迭代      
        
    • 如果短信地址已经在地图中,则忽略
    •   
    • 将SMS放入LinkedHashMap
    •   
  4.   

0 个答案:

没有答案