Я пытаюсь узнать, как маяки (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);
}