Мониторинг и настройка маяка Android
Я занимаюсь разработкой приложения для мониторинга и настройки маяковых устройств. Мне нужно контролировать устройства iBeacon и Eddystone. Я прошел через приложение управления NRF Master. Работает отлично. Но мне нужен исходный код для этого. Любой другой вариант доступен. Пожалуйста, дайте мне лучшее решение для анализа маяковых устройств. Заранее спасибо.
1 ответ
Я бы посоветовал вам использовать библиотеку AltBeacon, которую я использовал в одном из моих проектов, и это довольно хорошо (я никак не связан с ней). Он предоставляет API для взаимодействия с маяками.
Вот образец Activity
для начала:
public class MyActivity extends AppCompatActivity implements
BeaconConsumer,
BootstrapNotifier,
RangeNotifier
{
private RegionBootstrap mRegionBootstrap;
private org.altbeacon.beacon.BeaconManager mAltBeaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_application);
mAltBeaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(MyActivity.this);
boolean isBleAvailableAndEnabled;
try {
isBleAvailableAndEnabled = mAltBeaconManager.checkAvailability();
} catch (BleNotAvailableException ex) {
isBleAvailableAndEnabled = false;
}
if (!isBleAvailableAndEnabled) {
// Handle case ...
finish();
}
// Disable Android L scanning on devices with Android 5.0 and above
if (Build.VERSION.SDK_INT >= 21) mAltBeaconManager.setAndroidLScanningDisabled(true);
// Add iBeacon Layout
mAltBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
// Add Eddystone Layout
mAltBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("Eddystone_layout"));
mAltBeaconManager.setBackgroundBetweenScanPeriod(3000); // 3 sec
mAltBeaconManager.setBackgroundScanPeriod(5000); // 5 sec
mAltBeaconManager.bind(MyActivity.this);
// Enable Beacon scanning
mRegionBootstrap = new RegionBootstrap(MyActivity.this, getScanningRegion());
}
@Override
public Context getApplicationContext() {
return (!isFinishing()) ? MyActivity.this : null);
}
@Override
public void onBeaconServiceConnect() {
try {
// Attach beacon range listener
mAltBeaconManager.setRangeNotifier(this);
mAltBeaconManager.startRangingBeaconsInRegion(new Region("Region", null, null, null));
} catch (RemoteException ex) {
// Handle exception
}
}
@Override
public void unbindService(ServiceConnection serviceConnection) {
// Not needed
}
@Override
public boolean bindService(Intent intent, ServiceConnection serviceConnection, int i) {
return false;
}
@Override
public void didEnterRegion(Region region) {
// Handle event
}
@Override
public void didExitRegion(Region region) {
// Handle event
}
@Override
public void didDetermineStateForRegion(int i, Region region) {
// Handle event
}
@Override
public void didRangeBeaconsInRegion(Collection<org.altbeacon.beacon.Beacon> rangingBeacons, Region region) {
// Here you will receive the beacons which are currently in range
}
}
Добавьте это в свой манифест:
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Примечание. Также обратите внимание на ограничения этой библиотеки, которые по существу являются программными и аппаратными ограничениями Android в отношении поддержки маяков.