Cómo obtener el registro de llamadas desde fecha específica en android
En mi aplicación estoy recibiendo el registro de todas las llamadas con este código. Me devuelve todo el registro de llamadas en mi teléfono android.
public class CallLogHelper { public static Cursor getAllCallLogs(ContentResolver cr) { // reading all data in descending order according to DATE String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; Uri callUri = Uri.parse("content://call_log/calls"); Cursor curCallLogs = cr.query(callUri, null, null, null, strOrder); return curCallLogs; } public static void insertPlaceholderCall(ContentResolver contentResolver, String name, String number) { ContentValues values = new ContentValues(); values.put(CallLog.Calls.NUMBER, number); values.put(CallLog.Calls.DATE, System.currentTimeMillis()); values.put(CallLog.Calls.DURATION, 0); values.put(CallLog.Calls.TYPE, CallLog.Calls.OUTGOING_TYPE); values.put(CallLog.Calls.NEW, 1); values.put(CallLog.Calls.CACHED_NAME, name); values.put(CallLog.Calls.CACHED_NUMBER_TYPE, 0); values.put(CallLog.Calls.CACHED_NUMBER_LABEL, ""); Log.d("Call Log", "Inserting call log placeholder for " + number); contentResolver.insert(CallLog.Calls.CONTENT_URI, values); } }
Pero mi problema es que quiero obtener el registro de llamadas de fecha específica, no todos los registros de llamadas. No tengo ni idea de cómo utilizar la consulta para obtener el registro de llamadas desde fecha específica. Ayúdeme gracias
- Comprobación del resultado de rawQuery de Android
- Recibo frecuentemente SQLiteDoneException al consultar un valor, ¿por qué?
- Cómo almacenar un valor de tiempo en la base de datos SQLite en Android?
- SQLite de Android Cursor fuera de límites de excepción en SELECT count (*) FROM table
- ¿Cómo implementar consultas complejas utilizando un proveedor de contenido?
- SQLite dispara en Android?
- Sqlite onCreate () problema Quiero que mi base de datos creada una vez, y no va a cambiar, pero no puedo crear datos cuando estoy en onCreate ()
- ¿Cuál es la mejor estrategia de clave primaria para una aplicación móvil en línea / offline multi-cliente con base de datos SQLite y Azure SQL como almacén central?
- No es posible obtener datos de la base de datos Sqlite
- Cómo almacenar datos desde un archivo XML a una base de datos SQLite en android
- Cómo almacenar datos en la base de datos sqlite con jQuery-mobile dreamviewer cc con phonegap en android?
- SQLiteException: Token no reconocido al leer de la base de datos
- Posible obtener detalles de error específicos de Android SQLiteConstraintException?
String[] strFields = { android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.TYPE, android.provider.CallLog.Calls.CACHED_NAME, android.provider.CallLog.Calls.DATE, android.provider.CallLog.Calls.DURATION, }; // Defines a string to contain the selection clause String mSelectionClause = android.provider.CallLog.Calls.DATE+ " >= ?"; // Initializes an array to contain selection arguments String[] mSelectionArgs = { createDate(2013,1,1).toString() }; Cursor mCallCursor = currentContext.getContentResolver().query( android.provider.CallLog.Calls.CONTENT_URI, strFields, mSelectionClause, mSelectionArgs, null ); return mCallCursor; public static Long createDate(int year, int month, int day) { Calendar calendar = Calendar.getInstance(); calendar.set(year, month, day); return calendar.getTimeInMillis(); }
StringBuffer sb = new StringBuffer(); String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; Uri callUri = Uri.parse("content://call_log/calls"); Calendar calendar = Calendar.getInstance(); calendar.set(2014, Calendar.MAY, 25); String fromDate = String.valueOf(calendar.getTimeInMillis()); calendar.set(2014, Calendar.MAY, 30); String toDate = String.valueOf(calendar.getTimeInMillis()); String[] whereValue = {fromDate,toDate}; Cursor cur = cr.query(callUri, null, android.provider.CallLog.Calls.DATE+" BETWEEN ? AND ?", whereValue, strOrder); //Cursor cur = cr.query(callUri, null, android.provider.CallLog.Calls.DATE+" >= ?", whereValue, strOrder); // loop through cursor while (cur.moveToNext()) { String callNumber = cur.getString(cur .getColumnIndex(android.provider.CallLog.Calls.NUMBER)); String callName = cur .getString(cur .getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME)); String callDate = cur.getString(cur .getColumnIndex(android.provider.CallLog.Calls.DATE)); SimpleDateFormat formatter = new SimpleDateFormat( "dd-MMM-yyyy HH:mm"); String dateString = formatter.format(new Date(Long .parseLong(callDate))); String callType = cur.getString(cur .getColumnIndex(android.provider.CallLog.Calls.TYPE)); String dir=null; int dircode = Integer.parseInt(callType); switch (dircode) { case CallLog.Calls.OUTGOING_TYPE: dir = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } String isCallNew = cur.getString(cur .getColumnIndex(android.provider.CallLog.Calls.NEW)); String duration = cur.getString(cur .getColumnIndex(android.provider.CallLog.Calls.DURATION)); sb.append("\nPhone Number:--- " + callNumber + " \nName:--- "+ callName +" \nCall Type dir:--- " + dir + " \nCall Date:--- " + dateString + " \n duration in sec :--- " + duration); sb.append("\n----------------------------------"); }
El registro de llamadas que se devuelve es entre 25/05/2014 y 30/05/2014. El valor devuelto se almacena en la variable sb, puede establecer este valor en un TextView para la prueba
- ¿Cómo excluir las bibliotecas publicitarias de la compilación de aplicaciones pagadas?
- Android runOnUiThread / AsyncTask no puede resolver CalledFromWrongThreadException