Как обнаружить несколько iBeacon, используя библиотеку Android beacon - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь узнать, как маяки (iBeacons) работают на android, поэтому я создал тестовое приложение, которое обнаруживает маяки. На другом устройстве у меня есть симулятор маяков, который, кажется, работает нормально. В моем приложении я получаю информацию для поиска маяков из файла json и передаю имя, UUID, несовершеннолетнего и мэра «детектору».

Когда я получаю данные от перехваченного Я создаю представление (Recycler) для просмотра информации о маяках и одновременно передаю информацию в детектор, но когда я делаю это, я не обнаруживаю маяки. Но если попытка обнаружить только один маяк работает нормально, проблема заключается в том, что я пытаюсь обнаружить более одного маяка за раз.

private void startBeaconMonitoring(String name, String UUID, String minor, String mayor) {
        Log.e(TAG, "Start Beacon Signarl: "+ name + " - " + UUID + " - " + minor + " - " + mayor);
        try {
    //          Name ---- UUID ---- Major ---- Major
            Here I'm passing all the info from beacons ---- this doesn't work dont detect any beacon
            beaconRegion = new Region(name, Identifier.parse(UUID), Identifier.parse(mayor), Identifier.parse(minor));

    //          This is to detect one beacon only this work if I don't pass the data from jsonparse()
    //          beaconRegion = new Region("beacon1", Identifier.parse("d9b9ec1f-3925-43d0-80a9-1e39d4cea95c"), Identifier.parse("1"), Identifier.parse("10"));
            beaconManager.startMonitoringBeaconsInRegion(beaconRegion);
            beaconManager.startRangingBeaconsInRegion(beaconRegion);
        } catch (RemoteException e) {
            e.printStackTrace();
        }

    }


 @Override
public void onBeaconServiceConnect() {
    Log.e("TAG", "onBeaconServiceConnect called");

    beaconManager.addMonitorNotifier(new MonitorNotifier() {
        @Override
        public void didEnterRegion(Region region) {
           if(!entryMessageRaised) {
               Log.e(TAG, "Beacon estan en rango");
               entryMessageRaised = true;
           }
        }

        @Override
        public void didExitRegion(Region region) {
            if(!exitMessageRaised) {
                Log.e(TAG, "Desconectado");
                exitMessageRaised = true;
            }
        }

        @Override
        public void didDetermineStateForRegion(int i, Region region) {
            Log.e(TAG, "No se esta conectado");
        }
    });



    beaconManager.addRangeNotifier(new RangeNotifier() {
        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
            if (!rangingMessageRaised && beacons != null && !beacons.isEmpty()) {
                for (Beacon beacon: beacons) {
                      Log.e(TAG, "Esta en la seccion  3");
                }
                rangingMessageRaised = true;
            }
        }
    });
}

Получение данных из inte rnet

private void jsonParse() {
    String url = "ibeaconsinfo.php";
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray jsonArray = response.getJSONArray("beacons");
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject beacon = jsonArray.getJSONObject(i);
                    String beaconName = beacon.getString("name");
                    String beaconUuid = beacon.getString("UUID");
                    String beaconMajor = beacon.getString("mayor");
                    String beaconMinor = beacon.getString("minor");

                    startBeaconMonitoring(beaconName, beaconUuid, beaconMajor, beaconMinor);

                    mExampleList.add(new ExampleItem(beaconName, beaconUuid));
                }
                mExampleAdapter = new ExampleAdapter(MainActivity.this, mExampleList);
                mRecyclerView.setAdapter(mExampleAdapter);
            } catch (JSONException e) {
                e.printStackTrace();
            }


        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    mRequestQueue.add(request);
}
...