Je me souviens que c'était un résolveur de contenu, mais je ne sais pas comment démarrer la chose.
3cross
Réponses:
69
Ceci est pour accéder à l'historique des appels téléphoniques:
Depuis Jellybean (4.1), vous avez besoin de l'autorisation suivante: <uses-permission android:name="android.permission.READ_CALL_LOG" />
Code:
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.
N'oubliez pas d'activer cette autorisation: <uses-permission android: name = "android.permission.READ_CALL_LOG" /> voici la méthode pour obtenir le journal des appels:
Aziz
Je ne sais pas cela mais théoriquement je peux dire que tous les messages sont stockés dans la même base de données. Alors oui, il peut accéder à tous les messages de l'appareil indépendamment du dual sim ou single sim. Vérifiez ce code et faites-moi savoir s'il ne fonctionne pas avec la double sim. Je vais faire de la R&D et vous fournir un code pour cela.
Abhinav Singh Maurya
1
get name retournera toujours null, soyez prudent
vuhung3990
@Abhinav Singh Maurya pouvez-vous m'aider à obtenir le journal des appels photo_uri à partir des journaux d'appels car je ne parviens pas à obtenir photo_uri à partir du journal des appels
Sagar
1
managedQuery () obsolète utiliser à la place Cursor cursor = context.getContentResolver (). query (CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + "DESC");
Sai Gopi Me
67
C'est la méthode utilisée pour obtenir le journal des appels. Mettez simplement cette méthode dans votre classe et obtenez la liste du journal des appels.
Étant donné que managedQuery est désormais obsolète, cette réponse est la plus pertinente.
abhi
16
Cet article est un peu vieux, mais voici une autre solution simple pour obtenir des données liées au Callfournisseur de contenu de journaux dans Android:
Chaque appel a tous les champs, vous pouvez donc obtenir toutes les informations dont vous avez besoin: date de l' appel, durée, numéro, type (ENTRANT, SORTANT, MANQUÉ), isRead, ...
Il fonctionne avec Listou Cursoret il existe un exemple d'application pour voir à quoi il ressemble et fonctionne.
Hé, j'ai vérifié votre solution, c'est bien. Le seul problème auquel je suis confronté est de savoir comment ajouter la dépendance dans mon projet eclipse?
Aradhna
@aradhna la bibliothèque utilise gradle et a été créée à partir d'Android Studio. Je pense que vous devrez le modifier un peu pour le faire fonctionner sur Eclipse
sromku
9
dans mon projet, j'obtiens une erreur int htc device.now ce code est universel. Je pense que cela vous aide.
Si nous utilisons Kotlin, il est plus court. Exemple de classe qui répond pour fournir des journaux d'appels:
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))}
Nous pouvons également convertir le curseur en carte:
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
}
Ces autorisations sont très sensibles et vous devrez prouver que votre application en a besoin. Mais même si elle en a vraiment besoin, l'équipe d'assistance Google Play peut facilement rejeter votre demande sans explications appropriées.
Voilà ce qui m'est arrivé. Après avoir fourni toutes les informations nécessaires avec la vidéo de démonstration de mon application, elle a été rejetée avec l'explication que mon "compte n'est pas autorisé à fournir une certaine solution de cas d'utilisation dans mon application" (la liste des cas d'utilisation qu'ils peuvent considérer comme une exception est répertorié sur cette page de politique). Aucun lien vers un énoncé de politique n'a été fourni pour expliquer ce que tout cela signifie. En gros, ils ont juste jugé mon application comme ne pas aller sans explication appropriée.
Je vous souhaite bonne chance de cause avec vos applications les gars mais soyez prudent.
Réponses:
Ceci est pour accéder à l'historique des appels téléphoniques:
Depuis Jellybean (4.1), vous avez besoin de l'autorisation suivante:
<uses-permission android:name="android.permission.READ_CALL_LOG" />
Code:
la source
C'est la méthode utilisée pour obtenir le journal des appels. Mettez simplement cette méthode dans votre classe et obtenez la liste du journal des appels.
Regarde ça
la sortie ressemble
la source
utilisez cette méthode de partout avec un contexte
la source
Cet article est un peu vieux, mais voici une autre solution simple pour obtenir des données liées au
Call
fournisseur de contenu de journaux dans Android:Utilisez cette bibliothèque: https://github.com/EverythingMe/easy-content-providers
Recevez tous les appels:
Chaque appel a tous les champs, vous pouvez donc obtenir toutes les informations dont vous avez besoin: date de l'
appel, durée, numéro, type (ENTRANT, SORTANT, MANQUÉ), isRead, ...
Il fonctionne avec
List
ouCursor
et il existe un exemple d'application pour voir à quoi il ressemble et fonctionne.En fait, il existe un support pour tous les fournisseurs de contenu Android tels que: Contacts, SMS, Calendrier, ... Doc complet avec toutes les options: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers
J'espère que cela a également aidé :)
la source
dans mon projet, j'obtiens une erreur int htc device.now ce code est universel. Je pense que cela vous aide.
la source
Pour obtenir uniquement l'historique des appels entrants, le code ci-dessous vous aidera :)
la source
Pour obtenir l'historique des appels entrants, sortants et manqués, espérons que ce code vous aidera :)
Appelez ce code sur votre fil d'arrière-plan.
la source
Utilisez le code ci-dessous:
la source
Si nous utilisons Kotlin, il est plus court. Exemple de classe qui répond pour fournir des journaux d'appels:
Nous pouvons également convertir le curseur en carte:
la source
Avant d'envisager d'intégrer les autorisations Lire le journal des appels ou Lire les SMS dans votre application, je vous conseille vivement de consulter cette politique de Google Play Market: https://support.google.com/googleplay/android-developer/answer/9047303 ? hl = fr
Ces autorisations sont très sensibles et vous devrez prouver que votre application en a besoin. Mais même si elle en a vraiment besoin, l'équipe d'assistance Google Play peut facilement rejeter votre demande sans explications appropriées.
Voilà ce qui m'est arrivé. Après avoir fourni toutes les informations nécessaires avec la vidéo de démonstration de mon application, elle a été rejetée avec l'explication que mon "compte n'est pas autorisé à fournir une certaine solution de cas d'utilisation dans mon application" (la liste des cas d'utilisation qu'ils peuvent considérer comme une exception est répertorié sur cette page de politique). Aucun lien vers un énoncé de politique n'a été fourni pour expliquer ce que tout cela signifie. En gros, ils ont juste jugé mon application comme ne pas aller sans explication appropriée.
Je vous souhaite bonne chance de cause avec vos applications les gars mais soyez prudent.
la source