Intereting Posts
Ошибка эмулятора Android: «Системный пользовательский интерфейс остановлен» Будет ли поддержка SDK Manager для Windows-8? Высота дочернего вида Android не соответствует родительскому элементу в элементе ListView Android Studio: импорт проекта в существующий проект Загрузка изображений в ImageView на Android Вам нужно сохранить высокий балл для Android-игры Простой пример сетки Android, использующий RecyclerView с GridLayoutManager (например, старый GridView) Что означает отрицательный dbm в силе сигнала? Просмотр в представлении просмотра пейджера между предыдущим и следующим видом Получить контекст PopupMenu как ContextMenu Как обрабатывать клики / касания на повторяющихся пользовательских компонентах? Проверка статуса сообщения GCM Android: использование FEATURE_NO_TITLE с пользовательской ViewGroup оставляет место поверх окна Android: когда нужно отменить регистрацию слушателя – onStop () или onDestroy () ListView с первым видимым элементом, имеющим разный макет

Android с несколькими контент-провайдерами (DLC)

Я хочу добавить дополнительный контент в свое приложение в качестве дополнительных баз данных. Должен ли я помещать их в apks и контент-провайдеры, чтобы они могли быть обновлены напрямую из Google Play или так же, как новые файлы db, загружаемые прямо в приложение.

Моя проблема с методом content-provider / apk заключается в том, что все они должны быть объявлены в манифесте android, и у меня может быть несколько баз данных, даже сотни, поэтому в моем манифесте потребуется 100% объявлений контент-провайдеров, даже если пользователь может Есть только пара или даже никто из них.

Если есть способ, я могу генерировать манифест динамически? Или загрузите контент-провайдеров за пределы манифеста?

благодаря

Я думаю, что самый чистый способ сделать это – иметь один уникальный ContentProvider для всех ваших db-файлов.

Вы должны создать свой выбор URI для базы данных.

Например: content://com.your.package/a_db_file/something/things/5

Затем при реализации вашего ContentProvider проанализируйте Uri, чтобы получить сегмент a_db_file , откройте соответствующий файл db, затем выполните необходимую работу в соответствии с остальными сегментами.

Возможно, вам понадобится метод getCorrectDb(String a_db_file) . Внутри этого метода вы должны сделать правильный вызов sqlLiteOpenHelper, который надлежащим образом соответствует требуемому файлу db.

Также взгляните на UriMatcher , это может быть полезно для вас. 🙂

В конце вы должны иметь что-то вроде:

 @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // TODO : Parse uri to get a_db_file string. SQLiteDatabase database = getCorrectDb(a_db_file); // TODO : get cursor from db according to other segments of uri. return cursor. } 

Я бы использовал один контент-провайдер, чтобы все упростилось, и используйте команду sql «attach database».