예제 #1
0
  private void smsTunnel() {
    Cursor cursor = null;
    String sms_id = null; // 数据处理标记,存入SharedPreferences
    try {
      RuntimeExceptionDao<SmsStructure, Long> dao =
          QualityApplication.getApplication(this).getDatabaseHelper().getSmsStructureDAO();
      cursor =
          getContentResolver()
              .query(
                  SmsContentObserver.SMS_URI,
                  null,
                  "_id > ?",
                  new String[] {sharedPreferences.getString(SmsContentObserver.SMS_FLAG_ID, "0")},
                  "_ID ASC");
      while (cursor.moveToNext()) {
        sms_id = cursor.getString(cursor.getColumnIndex("_id"));
        int type = cursor.getInt(cursor.getColumnIndex("type"));
        String number = cursor.getString(cursor.getColumnIndex("address"));
        String name = Contacts.lookupPersonName(getApplicationContext(), number, null);
        DateTime ddate = new DateTime(cursor.getLong(cursor.getColumnIndex("date")));

        SmsStructure structure =
            new SmsStructure(
                MobileNetType.getPhoneType(getApplicationContext()),
                MobileNetType.getMobileTypeValue(getApplicationContext()),
                name,
                number,
                type,
                ddate);
        dao.create(structure);
      }
    } catch (Exception e) {
      Log.w(TAG, "未能处理当前短信记录数据", e);
    } finally {
      try {
        if (null != cursor) cursor.close();
      } catch (Exception e) {
      }
      if (!Strings.isEmpty(sms_id))
        sharedPreferences.edit().putString(SmsContentObserver.SMS_FLAG_ID, sms_id).commit();
    }
    sendMessage(PhoneStateService.OBSERVER_INSTALL, PhoneStateService.OBSERVER_INSTALL_SMS);
  }
예제 #2
0
 private void callsTunnel() {
   Cursor cursor = null;
   String calls_id = null; // 数据处理标记,存入SharedPreferences
   try {
     RuntimeExceptionDao<CallsStructure, Long> dao =
         QualityApplication.getApplication(this).getDatabaseHelper().getCallsStructureDAO();
     cursor =
         getContentResolver()
             .query(
                 CallsContentObserver.CALLS_URI,
                 null,
                 "_id > ?",
                 new String[] {
                   sharedPreferences.getString(CallsContentObserver.CALLS_FLAG_ID, "0")
                 },
                 CallLog.Calls._ID + " ASC");
     while (cursor.moveToNext()) {
       calls_id = cursor.getString(cursor.getColumnIndex(CallLog.Calls._ID));
       int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE));
       String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
       String name =
           Contacts.lookupPersonName(
               getApplicationContext(),
               number,
               cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)));
       long duration = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DURATION));
       DateTime ddate = new DateTime(cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)));
       CallsStructure structure =
           new CallsStructure(
               MobileNetType.getPhoneType(getApplicationContext()),
               MobileNetType.getMobileTypeValue(getApplicationContext()),
               name,
               number,
               type,
               CallDropCause.UNKNOW.toString(),
               duration,
               ddate);
       dao.create(structure);
     }
   } catch (Exception e) {
     Log.w(TAG, "未能处理当前通话记录数据", e);
   } finally {
     try {
       if (null != cursor) cursor.close();
     } catch (Exception e) {
     }
     if (!Strings.isEmpty(calls_id))
       sharedPreferences.edit().putString(CallsContentObserver.CALLS_FLAG_ID, calls_id).commit();
   }
   try {
     RuntimeExceptionDao<CallCauseCache, Long> dao =
         QualityApplication.getApplication(this).getDatabaseHelper().getCallCauseCacheDAO();
     RuntimeExceptionDao<CallsStructure, Long> callDao =
         QualityApplication.getApplication(this).getDatabaseHelper().getCallsStructureDAO();
     List<CallCauseCache> caches = dao.queryForAll();
     // 遍历
     if (null != caches && caches.size() > 0) {
       for (CallCauseCache cache : caches) {
         CallsStructure struct =
             callDao
                 .queryBuilder()
                 .orderBy("ddate", false)
                 .where()
                 .eq("ddate", cache.getDdate())
                 .queryForFirst();
         if (null != struct) {
           // 更新断开原因
           struct.setCause(cache.getCause());
           callDao.update(struct);
           // 删除
           dao.deleteById(cache.getId());
         }
       }
     }
   } catch (Exception e) {
     Log.d(TAG, "更新通话断开原因时出现异常");
   }
   sendMessage(PhoneStateService.OBSERVER_INSTALL, PhoneStateService.OBSERVER_INSTALL_CALLS);
 }