Я пытаюсь создать приложение для Android для обнаружения маяков на основе Gimbal с помощью Gimbal sdk, но мое приложение не может обнаружить маяк. Но если я попытаюсь использовать BluetoothGATT, я смогу обнаружить маяк. Ниже приведена часть моего кода, которая прослушивает события маяка. Проверка ключа API прошла успешно, но по-прежнему не удается отобразить близость.
public class MainActivity extends Activity {
private PlaceManager placeManager;
private PlaceEventListener placeEventListener;
private BeaconEventListener beaconEventListener;
private BeaconManager beaconManager;
private String TAG = "beacon";
public ArrayAdapter<String> listAdapter;
public ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
Gimbal.setApiKey(getApplication(),
"MY API KEY ");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
monitorPlace();
listenBeacon();
CommunicationManager.getInstance().startReceivingCommunications();
}
private void listenBeacon() {
BeaconEventListener beaconEventListener = getBeaconEventListener();
BeaconManager beaconManager = new BeaconManager();
beaconManager.addListener(beaconEventListener);
beaconManager.startListening();
}
private void monitorPlace() {
placeEventListener = getPlaceEventListener();
// placeManager = PlaceManager.getInstance();
// placeManager.addListener(placeEventListener);
placeManager = PlaceManager.getInstance();
placeManager.addListener(placeEventListener);
placeManager.startMonitoring();
}
private void initView() {
GimbalLogConfig.enableUncaughtExceptionLogging();
listAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(listAdapter);
listAdapter.add(" Gimbal API Key got Set Successfuly");
listAdapter.notifyDataSetChanged();
GimbalDebugger.enableBeaconSightingsLogging();
}
private BeaconEventListener getBeaconEventListener() {
Log.i(TAG, "BeaconEventListener started sucessfully...");
BeaconEventListener beaconSightingListener = new BeaconEventListener() {
@Override
public void onBeaconSighting(BeaconSighting beaconSighting) {
super.onBeaconSighting(beaconSighting);
listAdapter.add(String.format("Name of Beacon is %s",
beaconSighting.getBeacon().getName()));
listAdapter.add(String.format("UUID is %s", beaconSighting
.getBeacon().getUuid()));
listAdapter.add(String.format("RSSI is %s",
beaconSighting.getRSSI()));
listAdapter.add(String.format("Battery Level is %s",
beaconSighting.getBeacon().getBatteryLevel()));
listAdapter.add(String.format("Temprature data is %s",
beaconSighting.getBeacon().getTemperature()));
}
};
}
private PlaceEventListener getPlaceEventListener() {
PlaceEventListener obj = new PlaceEventListener() {
@Override
public void onBeaconSighting(BeaconSighting sight, List<Visit> visit) {
super.onBeaconSighting(sight, visit);
listAdapter.add(String.format("Beacon Found: %s",
sight.getBeacon()));
listAdapter.add(String.format("Name of Beacon is %s", sight
.getBeacon().getName()));
listAdapter.add(String.format("Identifier is %s", sight
.getBeacon().getIdentifier()));
listAdapter.add(String.format("RSSI is %s", sight.getRSSI()));
listAdapter.add(String.format("UUID is %s", sight.getBeacon()
.getUuid()));
listAdapter.add(String.format("Temprature is%s", sight
.getBeacon().getTemperature()));
listAdapter.add(String.format("BatteryLevel is %s", sight
.getBeacon().getBatteryLevel()));
listAdapter.add(String.format("Icon URL is %s", sight
.getBeacon().getIconURL()));
listAdapter.add(String.format("Start Visit for %s", visit
.iterator().toString()));
}
// @Override
public void onVisitStart(Visit visit) {
super.onVisitStart(visit);
listAdapter.add(String.format("Start Visit for %s", visit
.getPlace().getName()));
Toast.makeText(getApplicationContext(),
visit.getPlace().getName(), Toast.LENGTH_SHORT).show();
listAdapter.notifyDataSetChanged();
}
@Override
public void onVisitEnd(Visit visit) {
// TODO Auto-generated method stub
super.onVisitEnd(visit);
listAdapter.add(String.format("End Visit for %s", visit
.getPlace().getName()));
listAdapter.notifyDataSetChanged();
}
};
return obj;
}
}
listAdapter.notifyDataSetChanged();
в методеonBeaconSighting()
. Может быть, он просто не отображает маяки, но они обнаружены? Вы определили места в GimbalManager? Мое предложение состоит в том, чтобы удалить весь код, который не используется напрямую для простого обнаружения маяков (так что оставьте только BeaconEventListener и удалите PlaceEventListener и CommunicationsManager) и посмотрите, как это работает. Вы проверили, добавили ли вы все необходимые разрешения и функции в AndroidManifest? Вы видели образец приложения Gimbal, как это делается? - person Stanislav   schedule 11.09.2015