Я пытаюсь выполнить white label мое приложение, изменив свой проект приложений Android в проект библиотеки Android, а затем импортирую библиотеку в новый проект приложений для Android.Белая маркировка с ContentProvider
У меня возникла проблема с тем, что мое приложение (читайте: Проект библиотеки) содержит ContentProvider.
При попытке установить мой новый проект Android приложений на эмуляторе, консоль говорит мне:
[2014-01-24 13:35:39 - WhitelabelTest] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
[2014-01-24 13:35:39 - WhitelabelTest] Please check logcat output for more details.
[2014-01-24 13:35:39 - WhitelabelTest] Launch canceled!
Согласно LogCat:
01-24 13:38:52.217: W/PackageManager(58): Can't install because provider name com.myapp.app.db.providers.MyProvider (in package com.example.whitelabeltest) is already used by com.myapp.app
01-24 13:38:52.227: W/PackageManager(58): Package couldn't be installed in /data/app/com.example.whitelabeltest-2.apk
делает это просто означает, что вы не можете иметь оба приложения установленных на одном устройстве, потому что они используют один и тот же ContentProvider? Или есть способ обойти это? Нужно ли мне создавать новый ContentProvider в новом Android-проекте с новым именем?
Вот Provider, как указано в манифесте моего WhitelabelTest проекта:
<provider
android:name="com.myapp.app.db.providers.MessagesProvider"
android:authorities="com.myapp.app.db.providers.MessagesProvider"
android:exported="false" />
Я попытался изменить параметр имени с тем же результатом.
Я собираюсь вырвать материал ContentProvider. У меня есть вопрос. Лучше ли создавать и закрывать мои 'SQLiteDatabaseHelper' и' SQLiteDatabase' в 'onResume'' '' '' '' '' '' '' '' '' '' '' '' '' '' Деям'? Или я должен делать это по мере необходимости? – Andrew
В том же духе, мне даже нужно сохранить переменную-член 'SQLiteDatabase' в моей деятельности? Или 'mHelper.getWritableDatabase()' достаточно легкий, что мне нужно только создать экземпляр 'SQLiteDatabaseHelper'? – Andrew
@AndrewL «Это лучше ...» - если вы будете обращаться к базе данных по нескольким потокам или нескольким компонентам, ваш SQLiteOpenHelper должен быть синглом, который живет в процессе вашего процесса. «Или mHelper.getWritableDatabase() достаточно легкий, что мне нужно только создать экземпляр SQLiteDatabaseHelper?"- yes,' getReadableDatabase() '/' getWritableDatabase() 'дешево, за исключением того, что вы впервые открываете их * и * нужно вызвать' onCreate() 'или' onUpgrade() 'вашего помощника. Вот почему вам нужно использовать эти методы в фоновом потоке вместе с остальной частью вашего ввода-вывода. – CommonsWare