Saya ingat itu menjadi pemecah konten, namun saya tidak tahu bagaimana memulainya.
melintasi
Jawaban:
69
Ini untuk mengakses riwayat panggilan telepon:
Pada Jellybean (4.1) Anda memerlukan izin berikut: <uses-permission android:name="android.permission.READ_CALL_LOG" />
Kode:
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.
Jangan lupa untuk mengaktifkan izin ini: <using-permission android: name = "android.permission.READ_CALL_LOG" /> ini adalah metode untuk mendapatkan log panggilan:
Aziz
Saya tidak tahu itu tetapi secara teoritis saya dapat mengatakan bahwa semua pesan disimpan dalam database yang sama. Jadi ya itu bisa mengakses semua pesan perangkat terlepas dari dual sim atau single sim. Periksa kode ini dan beri tahu saya jika tidak berfungsi dengan dual sim. Saya akan melakukan beberapa R&D dan memberi Anda kode untuk itu.
Abhinav Singh Maurya
1
mendapatkan nama akan selalu mengembalikan null, hati
vuhung3990
@Abhinav Singh Maurya dapatkah Anda membantu saya mendapatkan log panggilan photo_uri dari log panggilan karena saya tidak bisa mendapatkan photo_uri dari log panggilan
Sagar
1
managedQuery () tidak lagi digunakan sebagai gantinya Cursor cursor = context.getContentResolver (). query (CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + "DESC");
Sai Gopi Me
67
Ini adalah metode yang digunakan untuk mendapatkan log Panggilan. Letakkan saja metode ini di kelas Anda dan dapatkan Daftar Log Panggilan.
Setiap Panggilan memiliki semua bidang, sehingga Anda bisa mendapatkan info apa pun yang Anda butuhkan: callDate, durasi, nomor, jenis (MASUK, KELUAR, MISSED), isRead, ...
Ia bekerja dengan Listatau Cursordan ada aplikasi contoh untuk melihat tampilannya dan bekerja.
Hei, saya sudah memeriksa solusi Anda, itu bagus. Satu-satunya masalah yang saya hadapi adalah bagaimana menambahkan ketergantungan pada proyek eclipse saya?
Aradhna
@aradhna perpustakaan tersebut menggunakan gradle dan dibangun dari Android Studio. Saya rasa, Anda perlu sedikit memodifikasinya agar dapat berjalan di Eclipse
sromku
9
dalam proyek saya, saya mendapatkan error int htc device. sekarang kode ini bersifat universal. Saya pikir ini membantu Anda.
Jika kita menggunakan Kotlin itu lebih pendek. Contoh kelas yang merespon untuk memberikan log panggilan:
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))}
Kami juga dapat mengubah kursor ke peta:
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
}
Izin tersebut sangat sensitif dan Anda harus membuktikan bahwa aplikasi Anda membutuhkannya. Tetapi bahkan jika itu benar-benar membutuhkannya, tim Dukungan Google Play dapat dengan mudah menolak permintaan Anda tanpa penjelasan yang tepat.
Inilah yang terjadi pada saya. Setelah memberikan semua informasi yang diperlukan bersama dengan video Demonstrasi aplikasi saya, itu ditolak dengan penjelasan bahwa "akun saya tidak diizinkan untuk memberikan solusi kasus penggunaan tertentu dalam aplikasi saya" (daftar kasus penggunaan yang mungkin mereka anggap sebagai pengecualian terdaftar di halaman Kebijakan itu). Tidak ada tautan ke pernyataan kebijakan apa pun yang diberikan untuk menjelaskan apa artinya semua itu. Pada dasarnya mereka hanya menilai aplikasi saya tidak berjalan tanpa penjelasan yang tepat.
Saya berharap semoga sukses dengan aplikasi Anda, tapi hati-hati.
Jawaban:
Ini untuk mengakses riwayat panggilan telepon:
Pada Jellybean (4.1) Anda memerlukan izin berikut:
<uses-permission android:name="android.permission.READ_CALL_LOG" />
Kode:
sumber
Ini adalah metode yang digunakan untuk mendapatkan log Panggilan. Letakkan saja metode ini di kelas Anda dan dapatkan Daftar Log Panggilan.
Lihat ini
keluarannya terlihat
sumber
gunakan metode ini dari mana saja dengan konteks
sumber
Posting ini agak lama, tetapi berikut adalah solusi mudah lainnya untuk mendapatkan data yang terkait dengan
Call
penyedia konten log di Android:Gunakan lib ini: https://github.com/EverythingMe/easy-content-providers
Dapatkan semua panggilan:
Setiap Panggilan memiliki semua bidang, sehingga Anda bisa mendapatkan info apa pun yang Anda butuhkan:
callDate, durasi, nomor, jenis (MASUK, KELUAR, MISSED), isRead, ...
Ia bekerja dengan
List
atauCursor
dan ada aplikasi contoh untuk melihat tampilannya dan bekerja.Faktanya, ada dukungan untuk semua penyedia konten Android seperti: Kontak, SMS, Kalender, ... Dokumen lengkap dengan semua opsi: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers
Semoga ini juga membantu :)
sumber
dalam proyek saya, saya mendapatkan error int htc device. sekarang kode ini bersifat universal. Saya pikir ini membantu Anda.
sumber
Untuk mendapatkan Hanya riwayat Panggilan Masuk, kode di bawah ini akan membantu Anda :)
sumber
Untuk mendapatkan riwayat Panggilan Masuk, Keluar dan Tidak Terjawab, semoga kode ini membantu Anda :)
Panggil kode ini di utas latar belakang Anda.
sumber
Gunakan kode Di Bawah Ini:
sumber
Jika kita menggunakan Kotlin itu lebih pendek. Contoh kelas yang merespon untuk memberikan log panggilan:
Kami juga dapat mengubah kursor ke peta:
sumber
Sebelum mempertimbangkan menjadikan izin Baca Log Panggilan atau Baca SMS sebagai bagian dari aplikasi Anda, saya sangat menyarankan Anda untuk melihat kebijakan Google Play Market ini: https://support.google.com/googleplay/android-developer/answer/9047303 ? hl = en
Izin tersebut sangat sensitif dan Anda harus membuktikan bahwa aplikasi Anda membutuhkannya. Tetapi bahkan jika itu benar-benar membutuhkannya, tim Dukungan Google Play dapat dengan mudah menolak permintaan Anda tanpa penjelasan yang tepat.
Inilah yang terjadi pada saya. Setelah memberikan semua informasi yang diperlukan bersama dengan video Demonstrasi aplikasi saya, itu ditolak dengan penjelasan bahwa "akun saya tidak diizinkan untuk memberikan solusi kasus penggunaan tertentu dalam aplikasi saya" (daftar kasus penggunaan yang mungkin mereka anggap sebagai pengecualian terdaftar di halaman Kebijakan itu). Tidak ada tautan ke pernyataan kebijakan apa pun yang diberikan untuk menjelaskan apa artinya semua itu. Pada dasarnya mereka hanya menilai aplikasi saya tidak berjalan tanpa penjelasan yang tepat.
Saya berharap semoga sukses dengan aplikasi Anda, tapi hati-hati.
sumber