Кажется, это должно быть сделано с помощью ContentResolver, но, используя информацию, полученную в ответе на на этот вопрос , я смог реализовать ее, не прибегая к поддержке базы данных.В приложении B (то, на которое опирается приложение A) я создал следующий Resolver Content:
public class ConfigProvider extends ContentProvider
{
public ConfigProvider() { }
@Override public int delete(Uri uri, String selection, String[] selectionArgs){ throw new UnsupportedOperationException("Not yet implemented"); }
@Override public String getType(Uri uri) { throw new UnsupportedOperationException("Not yet implemented"); }
@Override public Uri insert(Uri uri, ContentValues values) { throw new UnsupportedOperationException("Not yet implemented"); }
@Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException("Not yet implemented"); }
@Override public boolean onCreate() { return false; }
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
//never mind the details of the query; we always just want to
//return the same set of data
return getConfig();
}
private Cursor getConfig()
{
//create a cursor from a predefined set of key/value pairs
MatrixCursor mc = new MatrixCursor(new String[] {"key","value"}, 1);
mc.addRow(new Object[] {"enabled", getEnabled()});
return mc;
}
private String getEnabled()
{
//access your shared preference or whatever else you're using here
}
}
Затем убедитесь, что ConntentProvider зарегистрирован в манифесте ...
<provider
android:name=".ConfigProvider"
android:authorities="com.abcxyz.ConfigProvider" <!--[yourpackagename].ConfigProvider-->
android:enabled="true"
android:exported="true">
</provider>
А вот пример кода для доступа к настройке из приложения A:
Cursor c = getContentResolver().query(Uri.parse("content://com.abcxyz.ConfigProvider/anytype"), null, null, null, null);
HashMap<String, String> allValues = new HashMap<>();
while (c.moveToNext())
{
allValues.put(c.getString(0), c.getString(1));
}
if(allValues.containsKey("enabled"))
{
Toast.makeText(this, "enabled state: " + allValues.get("enabled"), Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "value not found in cursor", Toast.LENGTH_LONG).show();
}