Как получить доступ к журналу вызовов для Android?

Я хотел бы получить журнал вызовов. Например, количество вызовов, сделанных пользователем, количество вызываемых минут и т. Д.

Как достичь этого в Android?

Это для доступа к истории телефонных звонков:

Что касается Jellybean (4.1), вам необходимо следующее разрешение:

Код:

  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 number String name= c.getString(c.getColumnIndex(CallLog.Calls.CACHED_NAME));// for name String duration = c.getString(c.getColumnIndex(CallLog.Calls.DURATION));// for duration int type = Integer.parseInt(c.getString(c.getColumnIndex(CallLog.Calls.TYPE)));// for call type, Incoming or out going. 

Это метод, используемый для получения журнала вызовов. Просто поставьте этот метод в свой class и получите список журнала вызовов.

Проверьте это

 private String getCallDetails() { StringBuffer sb = new StringBuffer(); Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, null, null, null); int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); sb.append("Call Details :"); while (managedCursor.moveToNext()) { String phNumber = managedCursor.getString(number); String callType = managedCursor.getString(type); String callDate = managedCursor.getString(date); Date callDayTime = new Date(Long.valueOf(callDate)); String callDuration = managedCursor.getString(duration); String dir = null; int dircode = Integer.parseInt(callType); switch (dircode) { case CallLog.Calls.OUTGOING_TYPE: dir = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } sb.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " + callDayTime + " \nCall duration in sec :--- " + callDuration); sb.append("\n----------------------------------"); } managedCursor.close(); return sb.toString(); } 

выход выглядит

введите описание изображения здесь

используйте этот метод повсюду с контекстом

 private static String getCallDetails(Context context) { StringBuffer stringBuffer = new StringBuffer(); Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + " DESC"); int number = cursor.getColumnIndex(CallLog.Calls.NUMBER); int type = cursor.getColumnIndex(CallLog.Calls.TYPE); int date = cursor.getColumnIndex(CallLog.Calls.DATE); int duration = cursor.getColumnIndex(CallLog.Calls.DURATION); while (cursor.moveToNext()) { String phNumber = cursor.getString(number); String callType = cursor.getString(type); String callDate = cursor.getString(date); Date callDayTime = new Date(Long.valueOf(callDate)); String callDuration = cursor.getString(duration); String dir = null; int dircode = Integer.parseInt(callType); switch (dircode) { case CallLog.Calls.OUTGOING_TYPE: dir = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } stringBuffer.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " + callDayTime + " \nCall duration in sec :--- " + callDuration); stringBuffer.append("\n----------------------------------"); } cursor.close(); return stringBuffer.toString(); } 

Это сообщение немного устарело, но вот еще одно простое решение для получения данных, связанных с провайдером контента журналов Call в Android:

Используйте этот lib: https://github.com/EverythingMe/easy-content-providers

Получить все звонки:

 CallsProvider callsProvider = new CallsProvider(context); List calls = callsProvider.getCalls().getList(); 

Каждый Call имеет все поля, поэтому вы можете получить любую необходимую информацию:
callDate, продолжительность, число, тип (INCOMING, OUTGOING, MISSED), isRead, …

Он работает со List или Cursor и есть пример приложения, чтобы посмотреть, как он выглядит и работает.

Фактически, есть поддержка для всех поставщиков контента Android, таких как: Контакты, SMS, Календарь, … Полный документ со всеми параметрами: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers

Надеюсь, это тоже помогло 🙂

в моем проекте я получаю ошибку int htc device.now, этот код является универсальным. Я думаю, это поможет вам.

  public class CustomContentObserver extends ContentObserver { public CustomContentObserver(Handler handler) { super(handler); System.out.println("Content obser"); } public void onChange(boolean selfChange) { super.onChange(selfChange); String lastCallnumber; currentDate = sdfcur.format(calender.getTime()); System.out.println("Content obser onChange()"); Log.d("PhoneService", "custom StringsContentObserver.onChange( " + selfChange + ")"); //if(!callFlag){ String[] projection = new String[]{CallLog.Calls.NUMBER, CallLog.Calls.TYPE, CallLog.Calls.DURATION, CallLog.Calls.CACHED_NAME, CallLog.Calls._ID}; Cursor c; c=mContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, projection, null, null, CallLog.Calls._ID + " DESC"); if(c.getCount()!=0){ c.moveToFirst(); lastCallnumber = c.getString(0); String type=c.getString(1); String duration=c.getString(2); String name=c.getString(3); String id=c.getString(4); System.out.println("CALLLLing:"+lastCallnumber+"Type:"+type); Database db=new Database(mContext); Cursor cur =db.getFirstRecord(lastCallnumber); final String endCall=lastCallnumber; //checking incoming/outgoing call if(type.equals("3")){ //missed call }else if(type.equals("1")){ //incoming call }else if(type.equals("2")){ //outgoing call } } c.close(); } } 

Чтобы получить только историю входящих звонков, код ниже поможет u 🙂

 private void getCallDetailsAgil() { StringBuffer sb = new StringBuffer(); Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, null, null, null); int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); sb.append("Call Details :"); while (managedCursor.moveToNext()) { String phNumber = managedCursor.getString(number); String callType = managedCursor.getString(type); String callDate = managedCursor.getString(date); Date callDayTime = new Date(Long.valueOf(callDate)); String callDuration = managedCursor.getString(duration); String dir = null; int dircode = Integer.parseInt(callType); switch (dircode) { case CallLog.Calls.OUTGOING_TYPE: dir = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; sb.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " + callDayTime + " \nCall duration in sec :--- " + callDuration); sb.append("\n----------------------------------"); miss_cal.setText(sb); break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } } managedCursor.close(); } 

Использовать ниже код:

 private void getCallDeatils() { StringBuffer stringBuffer = new StringBuffer(); Cursor managedCursor = getActivity().managedQuery(CallLog.Calls.CONTENT_URI, null, null, null, null); int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); stringBuffer.append("Call Deatils"); while (managedCursor.moveToNext()) { String phNumber = managedCursor.getString(number); String callType = managedCursor.getString(type); String callDate = managedCursor.getString(date); Date callDayTime = new Date(Long.valueOf(callDate)); DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); String reportDate = df.format(callDayTime); String callDuration = managedCursor.getString(duration); String dir = null; int dircode = Integer.parseInt(callType); switch (dircode) { case CallLog.Calls.OUTGOING_TYPE: dir = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } stringBuffer.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " +callDate + " \nCall duration in sec :--- " + callDuration); stringBuffer.append("\n----------------------------------"); logs.add(new LogClass(phNumber,dir,reportDate,callDuration)); } 
  • Android Facebook SDK 4 в Eclipse
  • Лучший способ получить бесплатную версию Android-приложения
  • Как распечатать stacktrace для исключения Android
  • onConfigurationChanged не получает вызов
  • Ошибка получения родительского элемента для элемента: ресурс не найден, который соответствует указанному имени после обновления до AppCompat v23
  • Как удалить приложение из списков приложений на консоли разработчика Android
  • Запуск активности из виджета
  • Зачем использовать код armeabi-v7a по кодексу армейцев?
  • Поиск контакта по телефону
  • Android AsyncTask не останавливается, когда отменяется, почему?
  • Как получить выбранный элемент в ListView?
  • Interesting Posts
    Давайте будем гением компьютера.