android altbeacon 蓝牙低功耗
android altbeacon bluetooth low energy
我正在尝试使用低功耗蓝牙和 Samsung Galaxy S5 上的 altbeacon 库扫描信标,也许我没有正确理解它,或者我无法理解它 运行。
我的清单的一部分如下所示:
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<application
....
<service
android:name=".BeaconScanner"
android:icon="@drawable/ic_launcher"
android:label="BeaconScanner" >
</service>
....
我正在扫描服务内的信标:
public class BeaconScanner extends Service implements BeaconConsumer {
private BeaconManager beaconManager;
private DBHelper myDB;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
myDB = new DBHelper(this);
if (Build.VERSION.SDK_INT >= 19 && getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
// BLE
BeaconManager.setAndroidLScanningDisabled(true);
} else {
// kein BLE
}
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
beaconManager.setForegroundBetweenScanPeriod(15000l);
beaconManager.setBackgroundBetweenScanPeriod(15000l);
beaconManager.bind(this);
return Service.START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
beaconManager.unbind(this);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
for(Beacon beacon : beacons)
{
if (beacon != null && beacon.getId1() != null) {
System.out.println("id1: " + beacon.getId1().toString());
System.out.println("id2: " + beacon.getId2().toString());
System.out.println("id3: " + beacon.getId3().toString());
String majorMinor = beacon.getId2().toString() + "-" + beacon.getId3().toString();
System.out.println(majorMinor);
long count = myDB.beaconExists(majorMinor);
System.out.println(count);
if (count == 0) {
getAndInsertBeaconDataSet(myDB, majorMinor);
System.out.println("inserted beacon: " + majorMinor);
}
}
}
}
}
});
try {
beaconManager.startRangingBeaconsInRegion(new Region("trewysUniqueBeaconRegion", null, null, null));
} catch (RemoteException e) {
}
}
private Boolean getAndInsertBeaconDataSet(DBHelper dbHelper, String beaconId) {
try {
BeaconGetter beaconGetter = new BeaconGetter();
return beaconGetter.execute(dbHelper, beaconId).get();
} catch (Exception e) {
return false;
}
}
}
我检查过,如果我的 phone 能够使用低功耗蓝牙,确实可以。
如果我的蓝牙没有激活,我会从图书馆收到这条消息:
06-15 09:16:46.399: W/CycledLeScanner(22748): Bluetooth is disabled. Cannot scan for beacons.
如果我激活蓝牙,图书馆工作正常,我的所有信标都在范围内。
所以我可能理解错了,我需要在 android 上激活蓝牙才能使用低功耗蓝牙吗?我认为不激活蓝牙也可以获得蓝牙信号?
如果可以在不激活蓝牙的情况下扫描低功耗蓝牙:我做错了什么?
感谢任何帮助,提前致谢。
霍尔特曼
您必须激活蓝牙才能使用 BLE(低功耗)。否则您无法扫描信标。此外,您的设备必须支持 BLE,大多数现代设备都支持它。
我想会有一种方法可以在不激活蓝牙的情况下使用 BLE 扫描信标。
检查图片:我不知道怎么做,但我推测一定有办法
我正在尝试使用低功耗蓝牙和 Samsung Galaxy S5 上的 altbeacon 库扫描信标,也许我没有正确理解它,或者我无法理解它 运行。
我的清单的一部分如下所示:
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<application
....
<service
android:name=".BeaconScanner"
android:icon="@drawable/ic_launcher"
android:label="BeaconScanner" >
</service>
....
我正在扫描服务内的信标:
public class BeaconScanner extends Service implements BeaconConsumer {
private BeaconManager beaconManager;
private DBHelper myDB;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
myDB = new DBHelper(this);
if (Build.VERSION.SDK_INT >= 19 && getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
// BLE
BeaconManager.setAndroidLScanningDisabled(true);
} else {
// kein BLE
}
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
beaconManager.setForegroundBetweenScanPeriod(15000l);
beaconManager.setBackgroundBetweenScanPeriod(15000l);
beaconManager.bind(this);
return Service.START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
beaconManager.unbind(this);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
for(Beacon beacon : beacons)
{
if (beacon != null && beacon.getId1() != null) {
System.out.println("id1: " + beacon.getId1().toString());
System.out.println("id2: " + beacon.getId2().toString());
System.out.println("id3: " + beacon.getId3().toString());
String majorMinor = beacon.getId2().toString() + "-" + beacon.getId3().toString();
System.out.println(majorMinor);
long count = myDB.beaconExists(majorMinor);
System.out.println(count);
if (count == 0) {
getAndInsertBeaconDataSet(myDB, majorMinor);
System.out.println("inserted beacon: " + majorMinor);
}
}
}
}
}
});
try {
beaconManager.startRangingBeaconsInRegion(new Region("trewysUniqueBeaconRegion", null, null, null));
} catch (RemoteException e) {
}
}
private Boolean getAndInsertBeaconDataSet(DBHelper dbHelper, String beaconId) {
try {
BeaconGetter beaconGetter = new BeaconGetter();
return beaconGetter.execute(dbHelper, beaconId).get();
} catch (Exception e) {
return false;
}
}
}
我检查过,如果我的 phone 能够使用低功耗蓝牙,确实可以。 如果我的蓝牙没有激活,我会从图书馆收到这条消息:
06-15 09:16:46.399: W/CycledLeScanner(22748): Bluetooth is disabled. Cannot scan for beacons.
如果我激活蓝牙,图书馆工作正常,我的所有信标都在范围内。
所以我可能理解错了,我需要在 android 上激活蓝牙才能使用低功耗蓝牙吗?我认为不激活蓝牙也可以获得蓝牙信号?
如果可以在不激活蓝牙的情况下扫描低功耗蓝牙:我做错了什么?
感谢任何帮助,提前致谢。
霍尔特曼
您必须激活蓝牙才能使用 BLE(低功耗)。否则您无法扫描信标。此外,您的设备必须支持 BLE,大多数现代设备都支持它。
我想会有一种方法可以在不激活蓝牙的情况下使用 BLE 扫描信标。 检查图片:我不知道怎么做,但我推测一定有办法