Pamiętam, że był to resolver treści, ale nie mam pojęcia, jak zacząć.
3cross
Odpowiedzi:
69
To służy do uzyskiwania dostępu do historii połączeń telefonicznych:
Od Jellybean (4.1) potrzebujesz następujących uprawnień: <uses-permission android:name="android.permission.READ_CALL_LOG" />
Kod:
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.
Nie zapomnij włączyć tego uprawnienia: <używa-pozwolenia android: name = "android.permission.READ_CALL_LOG" /> jest to metoda uzyskiwania dziennika połączeń:
Aziz
Nie wiem, ale teoretycznie mogę powiedzieć, że wszystkie wiadomości są przechowywane w tej samej bazie danych. Więc tak, może uzyskać dostęp do wszystkich wiadomości urządzenia, niezależnie od podwójnej karty SIM lub jednej karty SIM. Sprawdź ten kod i daj mi znać, jeśli nie działa z podwójną kartą SIM. Zrobię trochę badań i rozwoju i dostarczę ci do tego kod.
Abhinav Singh Maurya
1
get name zawsze zwróci null, bądź ostrożny
vuhung3990
@Abhinav Singh Maurya, czy możesz mi pomóc uzyskać dziennik połączeń photo_uri z dzienników połączeń, ponieważ nie mogę uzyskać dziennika połączeń photo_uri z rejestru połączeń
Sagar
1
managedQuery () przestarzałe użyj tego zamiast tego Cursor cursor = context.getContentResolver (). query (CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + "DESC");
Sai Gopi Me
67
Jest to metoda używana do pobierania dziennika połączeń. Po prostu umieść tę metodę w swojej klasie i pobierz listę dziennika połączeń.
Ponieważ managedQuery jest teraz przestarzałe, więc ta odpowiedź jest najbardziej odpowiednia.
abhi
16
Ten post jest trochę stary, ale oto kolejne łatwe rozwiązanie do uzyskiwania danych związanych z Calldostawcą zawartości dzienników w systemie Android:
Każde wezwanie ma wszystkie pola, więc możesz uzyskać wszelkie potrzebne informacje: data połączenia, czas trwania, numer, typ (PRZYCHODZĄCE, WYCHODZĄCE, NIEODEBRANE), przeczytane, ...
Działa z Listlub Cursori jest przykładowa aplikacja, aby zobaczyć, jak wygląda i działa.
Jeśli używamy Kotlina, jest krótszy. Przykład klasy, która odpowiada na udostępnienie dzienników połączeń:
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))}
Możemy również przekonwertować kursor na mapę:
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
}
Te uprawnienia są bardzo wrażliwe i będziesz musiał udowodnić, że Twoja aplikacja ich potrzebuje. Ale nawet jeśli naprawdę ich potrzebuje, zespół pomocy technicznej Google Play może z łatwością odrzucić Twoją prośbę bez odpowiednich wyjaśnień.
To właśnie mi się przytrafiło. Po dostarczeniu wszystkich potrzebnych informacji wraz z filmem demonstracyjnym mojego wniosku został odrzucony z wyjaśnieniem, że moje „konto nie jest upoważnione do zapewniania rozwiązania określonego przypadku użycia w mojej aplikacji” (lista przypadków użycia, które mogą uznać za wyjątek jest wymieniony na tej stronie z zasadami). Nie podano linku do jakiegokolwiek oświadczenia politycznego, które wyjaśniałoby, co to wszystko oznacza. Po prostu ocenili, że moja aplikacja nie działa bez odpowiedniego wyjaśnienia.
Życzę powodzenia z twoimi aplikacjami, ale bądź ostrożny.
Odpowiedzi:
To służy do uzyskiwania dostępu do historii połączeń telefonicznych:
Od Jellybean (4.1) potrzebujesz następujących uprawnień:
<uses-permission android:name="android.permission.READ_CALL_LOG" />
Kod:
źródło
Jest to metoda używana do pobierania dziennika połączeń. Po prostu umieść tę metodę w swojej klasie i pobierz listę dziennika połączeń.
Sprawdź to
wyjście wygląda
źródło
używaj tej metody z dowolnego miejsca z kontekstem
źródło
Ten post jest trochę stary, ale oto kolejne łatwe rozwiązanie do uzyskiwania danych związanych z
Call
dostawcą zawartości dzienników w systemie Android:Użyj tej biblioteki: https://github.com/EverythingMe/easy-content-providers
Odbieraj wszystkie połączenia:
Każde wezwanie ma wszystkie pola, więc możesz uzyskać wszelkie potrzebne informacje:
data połączenia, czas trwania, numer, typ (PRZYCHODZĄCE, WYCHODZĄCE, NIEODEBRANE), przeczytane, ...
Działa z
List
lubCursor
i jest przykładowa aplikacja, aby zobaczyć, jak wygląda i działa.W rzeczywistości istnieje wsparcie dla wszystkich dostawców treści na Androida, takich jak: Kontakty, SMS-y, Kalendarz, ... Pełna dokumentacja ze wszystkimi opcjami: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers
Mam nadzieję, że to też pomogło :)
źródło
w moim projekcie otrzymuję błąd int htc device.now ten kod jest uniwersalny. Myślę, że to dla ciebie pomoc.
źródło
Aby uzyskać historię tylko połączeń przychodzących, poniższy kod pomoże ci :)
źródło
Aby uzyskać historię połączeń przychodzących, wychodzących i nieodebranych, miej nadzieję, że ten kod ci pomoże :)
Wywołaj ten kod w swoim wątku w tle.
źródło
Użyj poniższego kodu:
źródło
Jeśli używamy Kotlina, jest krótszy. Przykład klasy, która odpowiada na udostępnienie dzienników połączeń:
Możemy również przekonwertować kursor na mapę:
źródło
Przed rozważeniem włączenia uprawnień Czytaj dziennik połączeń lub Czytaj SMS-y do swojej aplikacji, zdecydowanie radzę zapoznać się z tą polityką Google Play Market: https://support.google.com/googleplay/android-developer/answer/9047303 ? hl = en
Te uprawnienia są bardzo wrażliwe i będziesz musiał udowodnić, że Twoja aplikacja ich potrzebuje. Ale nawet jeśli naprawdę ich potrzebuje, zespół pomocy technicznej Google Play może z łatwością odrzucić Twoją prośbę bez odpowiednich wyjaśnień.
To właśnie mi się przytrafiło. Po dostarczeniu wszystkich potrzebnych informacji wraz z filmem demonstracyjnym mojego wniosku został odrzucony z wyjaśnieniem, że moje „konto nie jest upoważnione do zapewniania rozwiązania określonego przypadku użycia w mojej aplikacji” (lista przypadków użycia, które mogą uznać za wyjątek jest wymieniony na tej stronie z zasadami). Nie podano linku do jakiegokolwiek oświadczenia politycznego, które wyjaśniałoby, co to wszystko oznacza. Po prostu ocenili, że moja aplikacja nie działa bez odpowiedniego wyjaśnienia.
Życzę powodzenia z twoimi aplikacjami, ale bądź ostrożny.
źródło