2017-09-14 15 views
0

call history should display like this is and delete on long press according to its count 다음 쿼리를 사용하여 장치에서 현재 월의 통화 기록을로드합니다. 내게 2.5 ~ 3.5 초가 걸리고 sq-lite에 저장됩니다 데이터베이스다른 앱처럼 통화 로그를 더 빨리 불러 와서 첨부 된 이미지처럼 표시하는 방법

CallLogHelper 클래스

 public static Cursor getAllCallLogs(ContentResolver cr) { 
      String[] PROJECTION = new String[]{ 
      CallLog.Calls.NUMBER, 
      CallLog.Calls._ID, 
      CallLog.Calls.CACHED_NAME, 
      CallLog.Calls.DATE, 
      CallLog.Calls.TYPE, 
      CallLog.Calls.DURATION}; 
    Calendar calendar = Calendar.getInstance(); 
    calendar.add(Calendar.MONTH, -1); 
    Date weekBefore = calendar.getTime(); 
    String strClause = CallLog.Calls.DATE + " >= ?"; 
    String[] strValues = {String.valueOf(weekBefore.getTime())}; 
    String strOrder = CallLog.Calls.DATE + " DESC limit 500"; 
    Cursor curCalls = cr.query(CallLog.Calls.CONTENT_URI, PROJECTION, strClause, 
      strValues, strOrder); 
    return curCalls; } 

CallLogLoaderServicel 클래스 저는 여기에 통화 기록과 일부 데이터베이스 작업을하고, 코드 실행을 위해 PHOTO_URI이 다른 커서에서로드 중이고 PHOTO_URI은 2/3 초가 걸리지 만 여전히 2/3 초 이상이 걸리지 않고 7 초 걸립니다. 난 DB에서뿐만 아니라 장치에서 삭제 그룹화 로그와 ID를 복용하고 길게 누르면에 삭제하면서

club_id

은 내가 계산을하고 club_id의 도움으로 특정 번호를 만들어 순차적으로 호출에 대한 일반적인 ID입니다

private void setCallLogs(Cursor curLog) { 
    android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE); 
    logsqLiteDatabase.beginTransaction(); 
    for (curLog.moveToLast(); !curLog.isBeforeFirst(); curLog.moveToPrevious()) { 
     String callNumber = curLog.getString(curLog 
       .getColumnIndex(CallLog.Calls.NUMBER)); 
     callNumber = Utilities.correctNumber(callNumber); 
     String ids = curLog.getString(curLog 
       .getColumnIndex(CallLog.Calls._ID)); 

     String name = curLog.getString(curLog 
       .getColumnIndex(CallLog.Calls.CACHED_NAME)); 

     String callname = "Unknown"; 
     try { 
      if (name != null) 
       callname = name; 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


     String callType = curLog.getString(curLog 
       .getColumnIndex(CallLog.Calls.TYPE)); 

     String duration = ""; 

     ***//with pic 7 second 
     //withought pic uri 5/6 second*** 

     String photoUri = ""; 
     /* if (callNumber != null) { 
      photoUri = Utilities_dialer.getContactPhoto(this, callNumber); 
     }*/ 

     String dateString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") 
       .format(new Date(Long 
         .parseLong(curLog.getString(curLog.getColumnIndex(CallLog.Calls.DATE))))); 

     if (log_db_Handler.getLogCount() == 0) { 
      log_db_Handler.addDialerLog(callname, callNumber, callType, ids, photoUri, dateString 
        , duration, String.valueOf(count), todayis, "1"); 

     } else { 
      Cursor readContact = log_db_Handler.readLastCallLogs(); 
     // if (readContact.moveToLast()) { 
       String phone = readContact.getString(readContact.getColumnIndex(DatabaseHandler.KEY_PH_NO)); 

       if (phone.equals(callNumber.replace(" ", ""))) { 
        String type = readContact.getString(readContact.getColumnIndex(DatabaseHandler.KEY_TYPE)); 

        club_id = readContact.getString(readContact.getColumnIndex(DialerDatabaseHandler.KEY_CLUB_ID)); 
        int c_id = Integer.parseInt(club_id); 
        if (type.equals(callType)) { 

         log_db_Handler.addDialerLog(callname, callNumber, callType, ids, photoUri, dateString 
           , duration, String.valueOf(count), todayis, String.valueOf(c_id)); 

        } else { 

         if (type.equals("3") && (callType.equals("10") || callType.equals("2") || callType.equals("1"))) { 

          c_id = c_id + 1; 

          log_db_Handler.addDialerLog(callname, callNumber, callType, ids, photoUri, dateString 
            , duration, String.valueOf(count), todayis, String.valueOf(c_id)); 

         } else if ((type.equals("10") || type.equals("2") || type.equals("1")) && callType.equals("3")) { 

          c_id = c_id + 1; 

          log_db_Handler.addDialerLog(callname, callNumber, callType, ids, photoUri, dateString 
            , duration, String.valueOf(count), todayis, String.valueOf(c_id)); 

         } else { 


          log_db_Handler.addDialerLog(callname, callNumber, callType, ids, photoUri, dateString 
            , duration, String.valueOf(count), todayis, String.valueOf(c_id)); 

         } 
        } 

       } else { 
        club_id = readContact.getString(readContact.getColumnIndex(DialerDatabaseHandler.KEY_CLUB_ID)); 
        int c_id = Integer.parseInt(club_id); 
        c_id = c_id + 1; 
        log_db_Handler.addDialerLog(callname, callNumber, callType, ids, photoUri, dateString 
          , duration, String.valueOf(count), todayis, String.valueOf(c_id)); 

       } 
      // } 
      readContact.close(); 

     } 
    } 
    logsqLiteDatabase.setTransactionSuccessful(); 
    logsqLiteDatabase.endTransaction(); 
    curLog.close(); 
    endTime = System.currentTimeMillis(); 
    long MethodeDuration = (endTime - startTime); 
    Log.e("MethodeDuration", "-log-" + MethodeDuration); 

    Intent intent = new Intent("log_updated"); 
    sendBroadcast(intent); 
    smartCallPreference.setLogFirstTime("1"); 
} 

답변

0

나는 데이터베이스를 사용하지 않고 노력하고 있으며, 더 빨리 답변을 업로드 한 마지막 수표와 비교하여 더 빠릅니다.

하지만 캐시 된 데이터를 사용할 수 없거나 연락처를 변경 한 후에 업데이트되지 않을 수 있으므로 전화 로그의 이름과 사진 URI가 문제가 있습니다. 그들의 다른 방법으로 그것을 처리 할 수 ​​있습니다.

private void setCallLogs(Cursor curLog) { 
    android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE); 
    int sr_id = 0; 
    while (curLog.moveToNext()) { 
     String callNumber = curLog.getString(curLog 
       .getColumnIndex(CallLog.Calls.NUMBER)); 
     callNumber = Utilities.correctNumber(callNumber); 
     String ids = curLog.getString(curLog 
       .getColumnIndex(CallLog.Calls._ID)); 

     String name = curLog.getString(curLog 
       .getColumnIndex(CallLog.Calls.CACHED_NAME)); 

     String callname = "Unknown"; 
     String photoUri = ""; 
     if (name != null) 
      callname = name; 


     String callType = curLog.getString(curLog 
       .getColumnIndex(CallLog.Calls.TYPE)); 

     String dateString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") 
       .format(new Date(Long 
         .parseLong(curLog.getString(curLog.getColumnIndex(CallLog.Calls.DATE))))); 
     //dateString = CallHistoryFragment.setdateToLog(dateString); 

     sr_id = sr_id + 1; 
     if (mainDialerhistory.size() == 0) { 

      club_id = 1; 
      count = 1; 

      mainDialerhistory.add(new HistoryController(ids, String.valueOf(sr_id), callname, callNumber.replace(" ", ""), dateString, 
        callType, "", "", count, photoUri, String.valueOf(club_id))); 

     } else { 
      count = 0; 
      int mainArraySize = mainDialerhistory.size() - 1; 
      if (mainDialerhistory.get(mainArraySize).getPhone().equals(callNumber.replace(" ", ""))) { 

       if (mainDialerhistory.get(mainArraySize).getcallType().equals(callType)) { 
        count = mainDialerhistory.get(mainArraySize).getCount() + 1; 
        club_id = Integer.parseInt(mainDialerhistory.get(mainArraySize).getGr_id()); 

        mainDialerhistory.add(new HistoryController(ids, String.valueOf(sr_id), callname, callNumber.replace(" ", ""), dateString, 
          callType, "", "", count, photoUri, String.valueOf(club_id))); 

       } else { 
        String lastType = mainDialerhistory.get(mainArraySize).getcallType(); 

        if (lastType.equals("3") && (callType.equals("10") || callType.equals("2") || callType.equals("1"))) { 
         count = 0; 
         club_id = Integer.parseInt(mainDialerhistory.get(mainArraySize).getGr_id()) + 1; 

         mainDialerhistory.add(new HistoryController(ids, String.valueOf(sr_id), callname, callNumber.replace(" ", ""), dateString, 
           callType, "", "", 1, photoUri, String.valueOf(club_id))); 

        } else if ((lastType.equals("10") || lastType.equals("2") || lastType.equals("1")) && callType.equals("3")) { 
         club_id = Integer.parseInt(mainDialerhistory.get(mainArraySize).getGr_id()) + 1; 

         mainDialerhistory.add(new HistoryController(ids, String.valueOf(sr_id), callname, callNumber.replace(" ", ""), dateString, 
           callType, "", "", count + 1, photoUri, String.valueOf(club_id))); 

        } else { 
         count = 0; 
         count = mainDialerhistory.get(mainArraySize).getCount() + 1; 
         club_id = Integer.parseInt(mainDialerhistory.get(mainArraySize).getGr_id()); 

         mainDialerhistory.add(new HistoryController(ids, String.valueOf(sr_id), callname, callNumber.replace(" ", ""), dateString, 
           callType, "", "", count, photoUri, String.valueOf(club_id))); 

        } 
       } 
      } else { 
       club_id = Integer.parseInt(mainDialerhistory.get(mainArraySize).getGr_id()) + 1; 
       mainDialerhistory.add(new HistoryController(ids, String.valueOf(sr_id), callname, callNumber.replace(" ", ""), dateString, 
         callType, "", "", 1, photoUri, String.valueOf(club_id))); 

      } 
     } 

    } 
    curLog.close(); 
    endTime = System.currentTimeMillis(); 
    long MethodeDuration = (endTime - startTime); 
    Log.e("MethodeDuration", "-count-" + mainDialerhistory.size()); 
    Log.e("MethodeDuration", "-log-" + MethodeDuration); 
    AccountController.getInstance().mAccountHistory.addAll(mainDialerhistory); 

    sendBroadcast(new Intent("log_updated")); 


    stopService(new Intent(this, CallLogIntentService.class)); 
}