BroadCastReceiver не получает данные? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть широковещательная рассылка, которая отправляет информацию о LatLng пользователя. В другом упражнении у меня есть приемник Broadcast, который должен получать эту информацию 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);
    }

Heatmap:

    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));
    }

Ответы [ 2 ]

1 голос
/ 27 марта 2019

intent.setAction("VRUData") не то же самое intentFilter.addAction("VRUDATA") - один во всех заглавных буквах.

0 голосов
/ 27 марта 2019

Попробуйте сначала: вы можете попробовать gmap.clear ();перед добавлением маркера на карту, возможно, проблема со старым маркером не может быть заменена новым маркером.

Попробуйте Second Thing:

Ваш приемник выглядит так в вашей деятельности или где бы вы ни использовали.

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;
             }
      }:
...