В настоящее время я разрабатываю приложение для набора номера для ОС Android.
Он показывает вызовы, контакты в ListViews. SearchView используется для поиска контактов по: фамилии, имени, псевдониму и всем его номерам. Если строка поиска представляет собой подстроку четырех типов ключей, список должен быть сжат до совпадающих записей.
я использую CursorAdapter и CursorLoader для заполнения списка. Это очень важно для производительности. До этого момента все работает и абсолютно ясно.
Теперь проблема: мне нужно объединить 2-3 таблицы из базы данных контактов по умолчанию (contacts2.db) в одном запросе sql. Поэтому мое приложение не должно использовать собственную частную базу данных. Но существующие ContentProviders не предлагают доступ более чем к одной таблице. --> ПРОБЛЕМА!
Реализуя свой собственный ContentProvider, можно выполнять соединения с использованием SQLiteQueryBuilder. Но на первый взгляд кажется, что это работает только для частных баз данных. Когда я пытаюсь получить прямой доступ к contact2.db, расположенному в:
/data/data/com.android.providers.contacts/databases/contacts2.db
Я получаю следующую ошибку:
Failed to open database '/data/data/com.android.providers.contacts/databases/contacts2.db'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (Sqlite code 14): Could not open database, (OS error - 13:Permission denied)
Что так или иначе ожидаемо, потому что у каждого приложения есть собственное хранилище, использующее соответствующий uid в базовой файловой системе Linux.
Итак, как я могу получить доступ для чтения к этой базе данных? Могу ли я как-то запросить этот db-объект из системы Android или с помощью объекта Context? Или я могу как-то получить эти права доступа?
Можно ли использовать то же AUTHOTITY_NAME, что и приложение для контактов?? Как это:
com.android.providers.contacts
- Я не заинтересован в объединении столбцов с использованием java-кода, это УЖАСНО, ОЧЕНЬ МЕДЛЕННО, и мне все равно нужен курсор вместо списка или подобных вещей.
- Мне не нужна помощь в SQL
- Мне не нужна помощь в том, как реализовать вещи для Android
Все вы, Android-профессионалы, это вообще возможно? Или API андроида действительно такой дрянной? Мне действительно нужно «присоединиться» к необходимой информации с помощью CursorJoiner и каким-то образом сгенерировать объект Cursor из первого?
Заранее большое спасибо, народ!