#java #android #broadcastreceiver #android-broadcast
#java #Android #broadcastreceiver #android-трансляция
Вопрос:
У меня есть трансляция, которая отправляет пользовательскую информацию LatLng. В другом действии у меня есть широковещательный приемник, который должен получать эту латентную информацию и отображать ее на карте в виде тепловой карты. Тепловые карты работают нормально, но я думаю, что трансляция либо не отправляется, либо не принимается, не могу точно определить, в чем проблема. Возможно, я неправильно их настраиваю? Чего я пытаюсь добиться, так это отобразить всех пользователей моего приложения на карте в виде точки тепловой карты. Может быть, это совершенно неправильный подход, если на то пошло?
Отправитель:
private void broadcastUserData(String userId, Double longitude, Double latitude) {
Intent intent = new Intent();
intent.putExtra("VRUId", userId);
intent.putExtra("longitude", longitude);
intent.putExtra("latitude", latitude);
intent.setAction("VRUData");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
Приемник:
final Map<String, LatLng> map = new HashMap<>();
private void createBroadcastReceiverVRUData() {
// just for testing
map.put("!2321", new LatLng(7.447893883296565, 9.48882099800934));
map.put("!2321", new LatLng(7.44789382565, 9.4888204));
map.put("!2231", new LatLng(7.447780625, 9.489011));
initializeHeatMap(map);
broadcastReceiverVRUData = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String userId = intent.getStringExtra("VRUId");
LatLng gps = new LatLng(
intent.getDoubleExtra("latitude", 0),
intent.getDoubleExtra("longitude", 0));
if (map.containsKey(userId)) {
map.remove(userId);
map.put(userId, gps);
} else {
map.put(userId, gps);
}
initializeHeatMap(map);
Log.d("THIS IS GPS", gps.toString());
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("VRUData");
LocalBroadcastManager.getInstance(this).registerReceiver(
broadcastReceiverVRUData, intentFilter);
}
Тепловая карта:
List<LatLng> list;
private void initializeHeatMap(Map<String, LatLng> map) {
list = new ArrayList<LatLng>(map.values());
Log.d("GPS coordinates", map.values().toString());
HeatmapTileProvider mProvider = new HeatmapTileProvider.Builder().data(list).build();
mMap.addTileOverlay((new TileOverlayOptions()).tileProvider(mProvider));
}
Ответ №1:
intent.setAction("VRUData")
это не одно и то же intentFilter.addAction("VRUDATA")
— один указан заглавными буквами.
Комментарии:
1. поместите приведенный ниже код в onCreate вашей активности. Необходимо инициализировать приложение ->
IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("VRUDATA"); LocalBroadcastManager.getInstance(this).registerReceiver( broadcastReceiverVRUData, intentFilter);
Обратитесь к этому для получения дополнительной информации: android—kotlin.blogspot.com/2018/12 /…2. Боюсь, что это тоже не помогло. 🙁
Ответ №2:
Попробуйте первое: вы можете попробовать gmap.clear (); перед добавлением маркера на карту, возможно, проблема в том, что старый маркер не может быть заменен новым маркером.
Попробуйте второе :
Ваш приемник выглядит следующим образом в вашей деятельности или где бы вы ни использовали.
private BroadcastReceiver receiver;
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// put your stuuf here
Bundle extras = intent.getExtras();
HashMap<String, String> mData;
}
}:
Комментарии:
1. Боюсь, что ни одно из ваших предложений не помогло! Я определяю BroadcastReceiver в методе, который вызывается в onCreate, поэтому я не вижу, чем ваша реализация отличается от моей