【发布时间】:2014-10-27 09:24:44
【问题描述】:
我正在编写关于查找和检测 IBeacons(这些是 BLE 设备)和测距它们(取决于 RSSI 值)的 Android 应用程序 我使用来自https://developer.android.com/guide/topics/connectivity/bluetooth-le.html的示例代码
但此代码在我的 Android 设备(Samsung Galaxy S3 和 LG G3)上的工作方式不同。
在我的 S3 上,“onLeScan”回调在循环中上升了很多次(大约每秒 5 次),并且每次都会根据范围给我不同的 RSSI 值。
但在我的 LG G3 上,当我开始扫描时,“onLeScan”回调只会上升一次。所以如果我想获得新的 RSSI 值,我需要重新开始扫描。而且我觉得不是很好。
我不知道是不是 LG G3 驱动程序有问题,或者我必须检查一些 android 设置。谁能告诉我一些关于它的事情吗?
这是我的代码:
public class Main2Activity extends Activity implements BluetoothAdapter.LeScanCallback {
private BluetoothAdapter mBluetoothAdapter;
private boolean mScanning;
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
/**/
final BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
enableBtIntent.addFlags(enableBtIntent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(enableBtIntent);
}
scanLeDevice(true);
}
private void scanLeDevice(final boolean enable) {
if (enable) {
// Stops scanning after a pre-defined scan period.
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mScanning = false;
mBluetoothAdapter.stopLeScan(Main2Activity.this);
}
}, 30000);
mScanning = true;
mBluetoothAdapter.startLeScan(Main2Activity.this);
} else {
mScanning = false;
mBluetoothAdapter.stopLeScan(Main2Activity.this);
}
}
ArrayList<String> datas = new ArrayList<String>();
@Override
public void onLeScan(BluetoothDevice arg0, int arg1, byte[] arg2) {
// TODO Auto-generated method stub
datas.add( arg2.toString() );
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
【问题讨论】:
-
您是否在沙滩箱中使用相同的信标硬件?它是什么信标模型?另外,每台设备上的 Android 版本是什么?
-
是的,我只有 1 个 IBeacon Cc2541(在此处购买:wellcorping.en.made-in-china.com/product/cSUnrYpPTuWE/…) Android 版本:G3 上为 4.4.2,S3 上为 4.3
-
这是由于蓝牙过滤造成的已知差异。不同的设备/品牌在 android 上实现 BLE 扫描的方式不同。 stackoverflow.com/questions/19502853/…。我不确定您是否可以做任何事情来“修复”它。
-
那太糟糕了。所以我必须重新开始扫描,每次我需要新的 RSSI 值时。(
标签: android bluetooth-lowenergy ibeacon samsung-mobile lg