Recuerdo que era un solucionador de contenido, sin embargo, no tengo idea de cómo comenzar.
3cross
Respuestas:
69
Esto es para acceder al historial de llamadas telefónicas:
A partir de Jellybean (4.1) necesita el siguiente permiso: <uses-permission android:name="android.permission.READ_CALL_LOG" />
Código:
Uri allCalls =Uri.parse("content://call_log/calls");Cursor c = managedQuery(allCalls,null,null,null,null);String num= c.getString(c.getColumnIndex(CallLog.Calls.NUMBER));// for numberString name= c.getString(c.getColumnIndex(CallLog.Calls.CACHED_NAME));// for nameString duration = c.getString(c.getColumnIndex(CallLog.Calls.DURATION));// for durationint type =Integer.parseInt(c.getString(c.getColumnIndex(CallLog.Calls.TYPE)));// for call type, Incoming or out going.
No olvide habilitar este permiso: <uses-allow android: name = "android.permission.READ_CALL_LOG" /> este es el método para obtener el registro de llamadas:
Aziz
No lo sé pero teóricamente puedo decir que todos los mensajes están almacenados en la misma base de datos. Entonces, sí, puede acceder a todos los mensajes del dispositivo, independientemente de la SIM dual o SIM única. Verifique este código y avíseme si no funciona con dual sim. Haré algo de I + D y te proporcionaré un código para eso.
Abhinav Singh Maurya
1
get name siempre devolverá nulo, tenga cuidado
vuhung3990
@Abhinav Singh Maurya, ¿pueden ayudarme a obtener el registro de llamadas photo_uri de los registros de llamadas porque no puedo obtener photo_uri del registro de llamadas?
Sagar
1
managedQuery () obsoleto use esto en su lugar Cursor cursor = context.getContentResolver (). query (CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + "DESC");
Sai Gopi Me
67
Este es el método utilizado para obtener el registro de llamadas. Simplemente coloque este método en su clase y obtenga la Lista del registro de llamadas.
Dado que managedQuery ahora está en desuso, esta respuesta es la más relevante.
abhi
16
Esta publicación es un poco antigua, pero aquí hay otra solución fácil para obtener datos relacionados con el Callproveedor de contenido de registros en Android:
Cada llamada tiene todos los campos, por lo que puede obtener cualquier información que necesite: callDate, duración, número, tipo (ENTRANTE, SALIENTE, PERDIDA), isRead, ...
Funciona con Listo Cursory hay una aplicación de muestra para ver cómo se ve y funciona.
Si usamos Kotlin es más corto. Ejemplo de clase que responde para proporcionar registros de llamadas:
import android.content.Contextimport android.database.Cursorimport android.provider.CallLog.Calls.*classCallsLoader{
fun getCallLogs(context:Context):List<List<String?>>{
val c = context.applicationContext
val projection = arrayOf(CACHED_NAME, NUMBER, TYPE, DATE, DURATION)
val cursor = c.contentResolver.query(
CONTENT_URI,
projection,null,null,null,null)return cursorToMatrix(cursor)}private fun cursorToMatrix(cursor:Cursor?):List<List<String?>>{
val matrix = mutableListOf<List<String?>>()
cursor?.use{while(it.moveToNext()){
val list = listOf(
it.getStringFromColumn(CACHED_NAME),
it.getStringFromColumn(NUMBER),
it.getStringFromColumn(TYPE),
it.getStringFromColumn(DATE),
it.getStringFromColumn(DURATION))
matrix.add(list.toList())}}return matrix
}private fun Cursor.getStringFromColumn(columnName:String)=
getString(getColumnIndex(columnName))}
También podemos convertir cursor a mapa:
fun getCallLogs(context:Context):Map<String,Array<String?>>{
val c = context.applicationContext
val projection = arrayOf(CACHED_NAME, NUMBER, TYPE, DATE, DURATION)
val cursor = c.contentResolver.query(
CONTENT_URI,
projection,null,null,null,null)return cursorToMap(cursor)}private fun cursorToMap(cursor:Cursor?):Map<String,Array<String?>>{
val arraySize = cursor?.count ?:0
val map = mapOf(
CACHED_NAME to Array<String?>(arraySize){""},
NUMBER to Array<String?>(arraySize){""},
TYPE to Array<String?>(arraySize){""},
DATE to Array<String?>(arraySize){""},
DURATION to Array<String?>(arraySize){""})
cursor?.use{for(i in0until arraySize){
it.moveToNext()
map[CACHED_NAME]?.set(i, it.getStringFromColumn(CACHED_NAME))
map[NUMBER]?.set(i, it.getStringFromColumn(NUMBER))
map[TYPE]?.set(i, it.getStringFromColumn(TYPE))
map[DATE]?.set(i, it.getStringFromColumn(DATE))
map[DURATION]?.set(i, it.getStringFromColumn(DURATION))}}return map
}
Esos permisos son muy confidenciales y tendrá que demostrar que su aplicación los necesita. Pero incluso si realmente los necesita, el equipo de soporte de Google Play puede rechazar fácilmente su solicitud sin las explicaciones adecuadas.
Esto es lo que me pasó. Después de proporcionar toda la información necesaria junto con el video de demostración de mi solicitud, se rechazó con la explicación de que " mi cuenta no está autorizada para proporcionar una determinada solución de caso de uso en mi aplicación" (la lista de casos de uso que pueden considerar como una excepción aparece en esa página de Política). No se proporcionó ningún enlace a ninguna declaración de política para explicar lo que significa. Básicamente, simplemente juzgaron que mi aplicación no iba sin una explicación adecuada.
Les deseo buena suerte con sus aplicaciones chicos, pero tengan cuidado.
Respuestas:
Esto es para acceder al historial de llamadas telefónicas:
A partir de Jellybean (4.1) necesita el siguiente permiso:
<uses-permission android:name="android.permission.READ_CALL_LOG" />
Código:
fuente
Este es el método utilizado para obtener el registro de llamadas. Simplemente coloque este método en su clase y obtenga la Lista del registro de llamadas.
Mira esto
la salida se ve
fuente
use este método desde cualquier lugar con un contexto
fuente
Esta publicación es un poco antigua, pero aquí hay otra solución fácil para obtener datos relacionados con el
Call
proveedor de contenido de registros en Android:Utilice esta biblioteca: https://github.com/EverythingMe/easy-content-providers
Recibe todas las llamadas:
Cada llamada tiene todos los campos, por lo que puede obtener cualquier información que necesite:
callDate, duración, número, tipo (ENTRANTE, SALIENTE, PERDIDA), isRead, ...
Funciona con
List
oCursor
y hay una aplicación de muestra para ver cómo se ve y funciona.De hecho, hay soporte para todos los proveedores de contenido de Android como: Contactos, SMS, Calendario, ... Documento completo con todas las opciones: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers
Espero que también haya ayudado :)
fuente
en Mi proyecto recibo el error int htc device. Ahora este código es universal. Creo que esto es de ayuda para ti.
fuente
Para obtener solo el historial de llamadas entrantes, el código a continuación lo ayudará :)
fuente
Para obtener el historial de llamadas entrantes, salientes y perdidas, espero que este código le ayude :)
Llame a este código en su hilo de fondo.
fuente
Utilice el siguiente código:
fuente
Si usamos Kotlin es más corto. Ejemplo de clase que responde para proporcionar registros de llamadas:
También podemos convertir cursor a mapa:
fuente
Antes de considerar hacer que los permisos Leer registro de llamadas o Leer SMS sean parte de su aplicación, le recomiendo encarecidamente que consulte esta política de Google Play Market: https://support.google.com/googleplay/android-developer/answer/9047303 ? hl = en
Esos permisos son muy confidenciales y tendrá que demostrar que su aplicación los necesita. Pero incluso si realmente los necesita, el equipo de soporte de Google Play puede rechazar fácilmente su solicitud sin las explicaciones adecuadas.
Esto es lo que me pasó. Después de proporcionar toda la información necesaria junto con el video de demostración de mi solicitud, se rechazó con la explicación de que " mi cuenta no está autorizada para proporcionar una determinada solución de caso de uso en mi aplicación" (la lista de casos de uso que pueden considerar como una excepción aparece en esa página de Política). No se proporcionó ningún enlace a ninguna declaración de política para explicar lo que significa. Básicamente, simplemente juzgaron que mi aplicación no iba sin una explicación adecuada.
Les deseo buena suerte con sus aplicaciones chicos, pero tengan cuidado.
fuente