обновить макет при чтении расстояний от маяка

Таким образом, в основном нужно обновить макет, который является ImageView, но для этого необходимо остановить диапазон для маяков и использовать beaconManager.unbind(context) и после обновления привязки изображения снова beaconManager.bind(context) проблема заключается в том, что этот контекст должно быть «org.altbeacon.beacon.BeaconConsumer», как создать контекст этого типа или это не так, но нужно вызвать другой метод beaconManager, чтобы остановить rangin и начать снова?

public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {

                /*
                if (beacons.size() > 0) {
                    Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away.");
                }
                */



                for(Beacon beacon: beacons){

                    double distancia = beacon.getDistance();

                    if(false) {
                        int rssi = beacon.getRssi();
                        int power = beacon.getTxPower();
                        //double distancia = beacon.getDistance();

                        distancias.add(beacon.getDistance());
                        Log.i(TAG, "Beacon detected with id1: " + beacon.getId1() + " id2:" + beacon.getId2() + " id3: " + beacon.getId3() + " distance: " + beacon.getDistance());
                        Log.i(TAG, "rss value->" + rssi + "  power->" + power);
                    }


                    if(distancia <= 1.0){
                        Log.i(TAG,"esta a 1m de alcance");



                        /*
                        Bitmap bmp = BitmapFactory.decodeResource(context.getResources(),R.drawable.image5m);
                        Radar.setImageBitmap(bmp);
                        */


                    }else if(distancia <= 2.0){/
                        Log.i(TAG,"esta a 2m de alcance");

                        //org.altbeacon.beacon.BeaconConsumer
                        //beaconManager.setAndroidLScanningDisabled(true);//setMonitorNotifier
                        beaconManager.unbind(ex);

                        Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.image10m);
                        Radar.setImageBitmap(bmp);

person H.C    schedule 10.04.2015    source источник
comment
Я не уверен, почему вы хотите остановить ранжирование для маяков в этом случае, но правильный способ остановить ранжирование — это вызвать beaconManager.stopRangingBeaconsInRegion(region); вместо вызова unbind   -  person davidgyoung    schedule 10.04.2015
comment
Хорошо, я хочу обновить макет, но получаю Only the original thread that created a view hierarchy can touch its views, так есть ли прямой способ остановить поток lib, чтобы вернуться к основному потоку?   -  person H.C    schedule 10.04.2015
comment
Смотрите мой ответ для простого решения.   -  person davidgyoung    schedule 10.04.2015


Ответы (1)


Вам не нужно останавливать сканирование маяка, чтобы обновить пользовательский интерфейс. Вам просто нужно выполнить изменение пользовательского интерфейса в потоке пользовательского интерфейса. Как это:

runOnUiThread(new Runnable() {
    public void run() {
        Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.image10m);
        Radar.setImageBitmap(bmp);
    }
}); 
person davidgyoung    schedule 10.04.2015