Ответ 1
Вы, безусловно, можете разделить одну базу данных между двумя приложениями.
Для обмена данными между приложениями (при условии, что они выпущены одним и тем же издателем) вам нужно указать общий идентификатор пользователя в AndroidManifest.xml обоих приложений.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="my.app" ... >
(Это недокументировано, но общий идентификатор пользователя должен быть строкой с хотя бы одним разделителем точек)
Остальное легко, и вам не нужно путаться с пути к базе данных. Просто используйте тот же DBAdapter в обоих приложениях. В приложении, которое размещает базу данных, вызовите DBAdapter с родным контекстом.
DBadapter hostDBAdapter = new DbAdapter(getApplicationContext());
performerDBadapter.open();
Во втором приложении войдите в базу данных с контекстом приложения для размещения базы данных.
Сначала определите общий контекст:
Context sharedContext = null;
try {
sharedContext = this.createPackageContext("replace.with.host.package.name", Context.CONTEXT_INCLUDE_CODE);
if (sharedContext == null) {
return;
}
} catch (Exception e) {
String error = e.getMessage();
return;
}
Затем откройте DBAdapter с общим контекстом:
DbAdapter sharedDBadapter = new PerformerDbAdapter(sharedContext);
sharedDBadapter.open();
В заключение, если ваша база данных существует раньше, чем установить идентификатор общего пользователя в манифесте, вам нужно будет удалить/переустановить приложения на физическом устройстве, чтобы вы не заперли себя из своей базы данных (ошибка sqlite 14). С другой стороны, эмулятор может оказаться более прощающим. Итог, если ваши приложения опубликованы на рынке Android, установка общего идентификатора пользователя в запоздалой мысли не будет работать.
Надеюсь, что это поможет.