精简版:
在我使用Android 5.0 Lollipop的测试中,我注意到android.bluetooth.le.BluetoothLeScanner检测BLE设备的频率低于Android 4.4 KitKat.为什么这样,还有其他选择吗?
长版:
我正在开发一款Android应用程序,专门用于Nexus 7平板电脑,专注于检测蓝牙低功耗(BLE)设备.该应用程序主要感兴趣的是信标的RSSI值,以确定它们与平板电脑的接近程度.这意味着我不需要连接到BLE设备,因为在检测到设备时RSSI值会传递给扫描回调.
在Android 4.4 KitKat中,当我调用时BluetoothAdapter.startLeScan(LeScanCallback),对于每个检测到的BLE设备,我的回调仅被调用ONCE.(我已经看到一些讨论声称每个设备的行为可能不同)但是,我对不断变化的RSSI值感兴趣,所以目前推荐的方法是以设定的间隔(在我的情况下为250ms)连续执行startLeScan和stopLeScan:
public class TheOldWay {
private static final int SCAN_INTERVAL_MS = 250;
private Handler scanHandler = new Handler();
private boolean isScanning = false;
public void beginScanning() {
scanHandler.post(scanRunnable);
}
private Runnable scanRunnable = new Runnable() {
@Override
public void run() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (isScanning) {
adapter.stopLeScan(leScanCallback);
} else if (!adapter.startLeScan(leScanCallback)) {
// an error occurred during startLeScan
}
isScanning = …Run Code Online (Sandbox Code Playgroud) rssi bluetooth-lowenergy ibeacon-android android-ibeacon android-5.0-lollipop
我在我的应用程序中使用Android Beacon Library,我逐字逐句地复制了他们的测距示例,但我不断收到您在代码下方看到的错误.任何帮助将不胜感激,我刚刚进入BTLE/beacons
package com.example.josh.beacons;
import android.os.Bundle;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import org.altbeacon.beacon.Beacon;
import org.altbeacon.beacon.BeaconConsumer;
import org.altbeacon.beacon.BeaconManager;
import org.altbeacon.beacon.BeaconParser;
import org.altbeacon.beacon.RangeNotifier;
import org.altbeacon.beacon.Region;
import java.util.Collection;
public class MainActivity extends AppCompatActivity implements BeaconConsumer {
protected static final String TAG = "RangingActivity";
private BeaconManager beaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
beaconManager.bind(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
beaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> …Run Code Online (Sandbox Code Playgroud) 我是Ibeacon的新手,我想知道我们可以在不使用任何SDKLibrary或库的情况下检测到android中的Ibeacon,任何人都可以提供示例示例.
我知道像Radius Networks这样的图书馆.但我不想使用任何图书馆
我正在开发一个我正在使用Beacons的应用程序.我已经完成了相关的Estimote SDK.现在问题是我需要知道特定灯塔的唯一ID.假设我有3个信标,并且所有信标都存在于设备的范围内.现在我想根据信标的唯一ID执行不同的功能.为此,我需要知道每个灯塔的唯一ID.目前我正在为Beacon提供UUID,只是检查它是否在设备区域内.我的代码如下: -
private static final String ESTIMOTE_PROXIMITY_UUID = "XYZ";
private static final Region ALL_ESTIMOTE_BEACONS = new Region("regionId",ESTIMOTE_PROXIMITY_UUID, null, null);
beaconManager.setMonitoringListener(new MonitoringListener() {
@Override
public void onExitedRegion(Region region) {
//Region Exited
}
@Override
public void onEnteredRegion(Region arg0, List<Beacon> arg1) {
// TODO Auto-generated method stub
//Do something ...
}
});
Run Code Online (Sandbox Code Playgroud)
现在我需要以编程方式获取Beacon的唯一ID,以便我可以根据ID做出决定.请帮我整理一下.任何帮助都会很明显.谢谢.
我在Android设备上使用AltBeacon示例应用程序 - altbeacon.org提供的示例应用程序位于:https://github.com/AltBeacon/android-beacon-library-reference
但是,启动时应用程序只检测并显示一个信标.我的Android设备附近有大约5个信标.我如何检测所有信标?
在RangingActivity.java中,我注意到当信标出现时正在调用此方法:
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
EditText editText = (EditText) RangingActivity.this.findViewById(R.id.rangingText);
Beacon firstBeacon = beacons.iterator().next();
logToDisplay("The first beacon " + firstBeacon.toString() + " is about " + firstBeacon.getDistance() + " meters away.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我修改了迭代器以在while循环中读取集合,如下所示:
Beacon firstBeacon;
while(beacons.iterator().hasNext()){
firstBeacon = beacons.iterator().next();
logToDisplay("The first beacon " + firstBeacon.toString() + " is about " + firstBeacon.getDistance() + " meters …Run Code Online (Sandbox Code Playgroud) 我试图实现信标扫描程序,我希望android BLE服务的行为类似于iOS"didRangeBeacons"方法,即它应该每秒调用一次.但在android中没有这样的方法.但是在android中,有一种"leScanCallback"方法可以非常频繁地调用,扫描周期不到一秒.那么有什么方法可以在leScanCallback方法中实现我的功能并将其扫描周期间隔增加到1秒,这样它的行为类似于iOS的"didRangeBeacons"方法.
*在android中连续扫描信标并增加其扫描间隔也是不好的编程?
提前致谢
我使用其示例坚持使用AltBeacon库实现简单的Beacon监视器.简而言之:我使用其参考应用程序,下载并在我的三星Galaxy S2上使用CM(Android 4.4.4)集成了其最新版本和运行应用程序.虽然调用了bindService,但我看到onBeaconServiceConnect回调从未调用过.我相信应该调用onBeaconServiceConnect以使应用程序正常工作.
我试过设置beaconManager.debug = true; 但它没有向我显示任何新日志(可能是因为我正在使用来自网站的预编译库).
此外,我已经检查了我的固件/硬件是否存在问题 - 但我发现它能够监控来自Google Play的其他应用程序的信标.我有iPhone和MacBook以及另外一个Android设备,所以我可以模拟让AltBeacon捕获它所需的任何传输信号.
有人能帮我吗?我很感激你给我的任何线索!
我正在尝试使用以下iBeaconGap cordova插件,它是RadiusNetworks Android iBeacons库的包装器.我的手机已准备好LE蓝牙,并通过Play商店的RadiusNetwork Detector应用程序检测我的信标.
但是将它添加到我的普通cordova项目会导致以下日志消息:"尝试通过intent回调:ComponentInfo {com.tecalliance.lucidbeacon/com.radiusnetworks.ibeacon.IBeaconIntentProcessor}".看起来它的起源是RadiusNetworks 的Callback.java类.
插件安装程序已正确更新AndroidManifest.xml文件:
<service android:enabled="true" android:exported="true"
android:name="com.radiusnetworks.ibeacon.IBeaconIntentProcessor">
<meta-data android:name="background" android:value="true" />
<intent-filter android:priority="1">
<action android:name="com.thinketg.plugin.ibeacongap.DID_RANGING" />
<action android:name="com.thinketg.plugin.ibeacongap.DID_MONITORING" />
</intent-filter>
</service>
<service android:enabled="true" android:exported="true"
android:isolatedProcess="false" android:label="iBeacon"
android:name="com.radiusnetworks.ibeacon.service.IBeaconService" />
<service android:enabled="true"
android:name="com.radiusnetworks.ibeacon.IBeaconIntentProcessor">
<meta-data android:name="background" android:value="true" />
<intent-filter android:priority="1">
<action android:name="com.thinketg.plugin.ibeacongap.DID_RANGING" />
<action android:name="com.thinketg.plugin.ibeacongap.DID_MONITORING" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
和
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
Run Code Online (Sandbox Code Playgroud)
我使用github上建议的插件,但是getBeacons()和failedGettingBeacons()都没有被调用.
function startBeaconScans() {
iBeaconGap.getBeacons(gotBeacons, failedGettingBeacons);
}
Run Code Online (Sandbox Code Playgroud)
不知道怎么解决这个问题?提前致谢 ;-)
android bluetooth-lowenergy ibeacon-android cordova-plugins android-ibeacon
我在网上找到了这个Android Beacon Library,我发现它非常好.但我想在我的应用程序中集成开源项目,并在代码中进行一些修改,以便在信标检测和其他一些场景中显示警报.其实我是android的新蜜蜂,所以如果有人可以帮我解决如何在应用程序中集成修改后的代码?提前致谢.
我使用的Android灯塔图书馆与BLE扫描例子.它在前台工作正常,可用于监控和测距.但是,对于后台,它仅适用于在应用程序中按"主页"并关闭屏幕的情况.当我从任务切换器中删除应用程序时,它无法正常工作.在这个例子中,我找不到像Service这样的东西来让事情在后台工作.
问题: