Как обмениваться данными между двумя процессами - PullRequest
5 голосов
/ 07 февраля 2012

Я использую разные процессы (используя android: process в моем манифесте), чтобы иметь возможность использовать более одного mapView в моем приложении ( Как использовать несколько MapActivities / MapViews для приложения / процесса Android ) , Эти 2 карты находятся в разных действиях и на разных вкладках моего общего tabhost.

Нет. Я хочу увеличить определенное место, которое выбрано пользователем в другой деятельности. Использование статических переменных не сработало. После этого я попытался сохранить данные в файле SharedPreferences и снова прочитать их в MapActivity. Но это тоже не работает. Данные успешно записаны, но MapActivity не находит никаких данных в SharedPreferences.

Есть ли возможность обмена данными между двумя или более процессами?

Сохранение данных о местоположении:

public static boolean addLocationToShared(float lat, float lon){
    Log.i(TAG, "addLocationToShared: " + lat + "," + lon);
    if(mapShared==null)
        mapShared = TLApplication.getAppContext().getSharedPreferences(MAP_SHARED_PREFS, Context.MODE_PRIVATE);
    return mapShared.edit().putFloat(PREF_LAT, lat).putFloat(PREF_LON, lon).commit();
}

Чтение данных о местоположении:

mapShared = TLApplication.getAppContext().getSharedPreferences(MAP_SHARED_PREFS, Context.MODE_PRIVATE);
float lat = mapShared.getFloat(PREF_LAT, 1000);
float lon = mapShared.getFloat(PREF_LON, 1000);
Log.d(TAG, "zoom to " + lat + ", " + lon);
if(lat != 1000 && lon != 1000){
    GeoPoint point = new GeoPoint((int)(lat * 1E6), (int)(lon * 1E6));
    zoomToLocation(point, 15);
}

Ответы [ 3 ]

4 голосов
/ 03 мая 2012

Простой метод - SharedPreferences.Используйте флаг «Context.MODE_MULTI_PROCESS», чтобы получить общие параметры.

В процессе записи:

SharedPreferences preferencesWriter = basedContext.getSharedPreferences("Keeps_a_constant_preferences_file_name", Context.MODE_MULTI_PROCESS);
preferencesWriter.edit().putString(someKey, savingValue).commit();

В процессе чтения:

SharedPreferences preferencesReader = basedContext.getSharedPreferences("Keeps_a_constant_preferences_file_name", Context.MODE_MULTI_PROCESS);
String savedValueInWriterProcess = preferencesWriter.getString(someKey, defaultValue);

ПРИМЕЧАНИЕ. ВВ процессе чтения необходимо каждый раз извлекать свежий вариант SharedPreferences, чтобы обеспечить обновление общего значения.

Другие методы: 1. Отправить широковещательную рассылку с дополнительными данными;2. Поставщик контента.

1 голос
/ 07 февраля 2012

Я думаю, Язык определения интерфейса Android (AIDL) может быть вашим ответом здесь. Я использовал его для связи между приложением и удаленным сервисом, запущенным из отдельного apk. Распределение данных не должно быть таким сложным, если вы просто проходите пару поплавков.

0 голосов
/ 08 февраля 2012

Я попробовал ответ JPriest и NickT, но они либо не сработали, либо сильно перегружены.Я закончил сохранять данные в файл и снова читать их в другом процессе.Не очень хорошее решение, но, по крайней мере, оно сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...