Я помню, что это был преобразователь контента, однако я не знаю, с чего начать.
3cross
Ответы:
69
Это для доступа к истории телефонных звонков:
Начиная с Jellybean (4.1) вам необходимо следующее разрешение: <uses-permission android:name="android.permission.READ_CALL_LOG" />
Код:
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.
Не забудьте включить это разрешение: <uses-permission android: name = "android.permission.READ_CALL_LOG" /> это метод для получения журнала вызовов:
Азиз,
Я не знаю, но теоретически могу сказать, что все сообщения хранятся в одной базе данных. Так что да, он может получить доступ ко всем сообщениям устройства, независимо от двух или одной SIM-карты. Проверьте этот код и дайте мне знать, если он не работает с двумя SIM-картами. Я проведу некоторые исследования и разработки и предоставлю вам код для этого.
Абхинав Сингх Маурья
1
get name всегда будет возвращать null, будьте осторожны
vuhung3990 02
@Abhinav Singh Maurya, не могли бы вы помочь мне получить журнал вызовов photo_uri из журнала вызовов, потому что я не могу получить photo_uri из журнала вызовов
Сагар
1
ManagedQuery () не рекомендуется использовать вместо этого Cursor cursor = context.getContentResolver (). query (CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + "DESC");
Саи Гопи Ме
67
Этот метод используется для получения журнала вызовов. Просто поместите этот метод в свой класс и получите список журнала вызовов.
Каждый вызов имеет все поля, поэтому вы можете получить любую необходимую информацию: дата вызова, продолжительность, номер, тип (ВХОДЯЩИЙ, ИСХОДЯЩИЙ, ПРОПУЩЕННЫЙ), isRead, ...
Он работает с Listили, Cursorи есть образец приложения, чтобы увидеть, как оно выглядит и работает.
Привет, я проверил твое решение, оно хорошее. Единственная проблема, с которой я столкнулся, заключается в том, как добавить зависимость в мой проект eclipse?
Aradhna
@aradhna библиотека использует gradle и была создана из Android Studio. Я думаю, вам нужно будет немного изменить его, чтобы он работал на Eclipse
sromku
9
в моем проекте я получаю сообщение об ошибке int htc device. теперь этот код универсален. Думаю, это тебе поможет.
Если мы используем Котлин, он короче. Пример класса, который отвечает за предоставление журналов вызовов:
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))}
Мы также можем преобразовать курсор в карту:
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
}
Эти разрешения очень важны, и вам нужно будет доказать, что они нужны вашему приложению. Но даже если они действительно нужны, служба поддержки Google Play может легко отклонить ваш запрос без объяснения причин.
Вот что случилось со мной. После предоставления всей необходимой информации вместе с демонстрационным видео моего приложения оно было отклонено с объяснением, что моя «учетная запись не авторизована для предоставления определенного решения варианта использования в моем приложении» (список вариантов использования, которые они могут рассматривать как исключение указан на этой странице Политики). Не было предоставлено никакой ссылки на какое-либо заявление о политике, чтобы объяснить, что все это означает. По сути, они просто посчитали, что мое приложение не работает без надлежащих объяснений.
Я желаю вам удачи с вашими приложениями, ребята, но будьте осторожны.
Ответы:
Это для доступа к истории телефонных звонков:
Начиная с Jellybean (4.1) вам необходимо следующее разрешение:
<uses-permission android:name="android.permission.READ_CALL_LOG" />
Код:
источник
Этот метод используется для получения журнала вызовов. Просто поместите этот метод в свой класс и получите список журнала вызовов.
Проверить это
результат выглядит
источник
используйте этот метод отовсюду с контекстом
источник
Этот пост немного устарел, но вот еще одно простое решение для получения данных, связанных с
Call
поставщиком содержимого журналов в Android:Используйте эту библиотеку: https://github.com/EverythingMe/easy-content-providers
Получать все звонки:
Каждый вызов имеет все поля, поэтому вы можете получить любую необходимую информацию:
дата вызова, продолжительность, номер, тип (ВХОДЯЩИЙ, ИСХОДЯЩИЙ, ПРОПУЩЕННЫЙ), isRead, ...
Он работает с
List
или,Cursor
и есть образец приложения, чтобы увидеть, как оно выглядит и работает.Фактически, есть поддержка для всех поставщиков контента Android, таких как: Контакты, SMS, Календарь, ... Полная документация со всеми опциями: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers
Надеюсь, это тоже помогло :)
источник
в моем проекте я получаю сообщение об ошибке int htc device. теперь этот код универсален. Думаю, это тебе поможет.
источник
Чтобы получить только историю входящих вызовов, код ниже поможет вам :)
источник
Чтобы получить историю входящих, исходящих и пропущенных вызовов, надеюсь, этот код поможет вам :)
Вызовите этот код в фоновом потоке.
источник
Используйте код ниже:
источник
Если мы используем Котлин, он короче. Пример класса, который отвечает за предоставление журналов вызовов:
Мы также можем преобразовать курсор в карту:
источник
Прежде чем рассматривать возможность включения разрешений на чтение журнала вызовов или SMS в ваше приложение, я настоятельно рекомендую вам ознакомиться с этой политикой Google Play Market: https://support.google.com/googleplay/android-developer/answer/9047303 ? hl = ru
Эти разрешения очень важны, и вам нужно будет доказать, что они нужны вашему приложению. Но даже если они действительно нужны, служба поддержки Google Play может легко отклонить ваш запрос без объяснения причин.
Вот что случилось со мной. После предоставления всей необходимой информации вместе с демонстрационным видео моего приложения оно было отклонено с объяснением, что моя «учетная запись не авторизована для предоставления определенного решения варианта использования в моем приложении» (список вариантов использования, которые они могут рассматривать как исключение указан на этой странице Политики). Не было предоставлено никакой ссылки на какое-либо заявление о политике, чтобы объяснить, что все это означает. По сути, они просто посчитали, что мое приложение не работает без надлежащих объяснений.
Я желаю вам удачи с вашими приложениями, ребята, но будьте осторожны.
источник