我是使用Google示例代码开发BLE扫描仪的初学者:https://github.com/googlesamples/android-BluetoothLeGatt
目前,代码无法检测到任何设备。 This post表示这是因为位置服务被禁用或未在运行时明确要求。我已经在我的Manifest中包含了所需的权限。
我添加了几行代码,我觉得应该可行。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setTitle(R.string.title_devices);
mHandler = new Handler();
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
finish();
}
// Initializes a Bluetooth adapter. For API level 18 and above, get a reference to
// BluetoothAdapter through BluetoothManager.
final BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
// Checks if Bluetooth is supported on the device.
if (mBluetoothAdapter == null) {
Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
finish();
return;
}
// Quick permission check
int permissionCheck = this.checkSelfPermission("Manifest.permission.ACCESS_FINE_LOCATION");
permissionCheck += this.checkSelfPermission("Manifest.permission.ACCESS_COARSE_LOCATION");
if (permissionCheck != 0) {
this.requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1001); //Any number
}
}
我认为我添加的快速权限检查应该可行,但应用程序似乎仍未检测到任何设备。
答案 0 :(得分:1)
我遇到了你所面临的同样情况。如果您使用的是Android 6.0或更高版本。您必须在运行时请求位置权限。获得蓝牙适配器后,让我们插入如下代码行来请求位置许可。当您的应用运行时,系统会显示一个对话框,询问您是否同意共享您的位置。
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1001);
如果这不是你问题的正确答案,我们会回复我的答案,我会立即删除。
答案 1 :(得分:0)
扫描仪的已注册状态= 133
这可能是由于以下原因。
1)Appication中未提供位置许可。
2)当连接到Devies时,停止扫描,然后连接到设备。
3)当我们正在向设备读取/写入数据时,不应进行扫描。 确保扫描已停止
4)如果开始进行Frist扫描,应等到扫描完成后再开始第二次扫描。
5)多次扫描而没有等待上一次扫描完成,可能会导致找不到扫描回叫。
尝试fast BLE Library,它会更有效地提供可用的Google BLE库。