Журнал звонков на galaxy

Рейтинг: 0Ответов: 2Опубликовано: 25.02.2015

Как можно вытащить список звонков из журнала звонков на устройствах самсунг, потому как андроид хранит только 500 звонков, а устройства самсунг хранят еще где-то эти звонки. Можно ли их как-то вытащить?

Ответы

▲ 2Принят

Если внимательно изучить исходники android.provider.CallLog, то видно, что действительно больше 500 записей в БД не хранится, основой является приватный метод:

private static Uri addEntryAndRemoveExpiredEntries(Context context, 
    Uri uri, ContentValues values) {
    final ContentResolver resolver = context.getContentResolver();
    Uri result = resolver.insert(uri, values);
    resolver.delete(uri, "_id IN " + "(SELECT _id FROM calls ORDER BY " + DEFAULT_SORT_ORDER + " LIMIT -1 OFFSET 500)", null);
    return result;
}

То есть после вставки удаляется старая запись, если количество записей более 500.

Вижу такие варианты, как победить проблему:

  1. В каком-то Galaxy захаркоденное число 500, видимо, можно задавать в настройках (я тоже как-то смутно помню, что в каком Galaxy так вроде и было) - сильно сомневаюсь, что в Galaxy провайдер CallLog переписан.
  2. Заново собрать провайдер с увеличенным лимитом - скажем, 5000, и заменить стоковый провайдер на свой (нужен рут).
  3. Поставить аппу, которая держит в своей БД историю звонков (таких, кстати, полно на маркете, например).
  4. Написать кастомный PhoneStateListener, который после звонка будет сохранять историю звонка в свою/вашу БД (по сути, так и работают аппы, сохраняющие историю звонков).
▲ 1

Это точно, что 500, Вы считали? И как определено, что хранится где-то ещё?

Вообще, если я правильно понимаю идеологию, то инфа о звонках хранится в журнале вызовов. Доступ к нему через

getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI,...

Возвращает Cursor.

Хотя, может быть, мои сведения устарели... Буду сам рад узнать про другие места хранения!