在AndroidManifest.xml文件中添加以下权限声明:
在代码中申请位置权限:
private static final int REQUEST_LOCATION_PERMISSIONS = 1234;
// ...
// Check if we have location permission
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (this.checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// Request permission
this.requestPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_PERMISSIONS);
return;
}
}
// ...
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
// Handle permission results
switch (requestCode) {
case REQUEST_LOCATION_PERMISSIONS: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted, start BLE scanning
startBleScan();
} else {
// Permission denied, show message to user
Toast.makeText(this, "BLE scan requires location permission", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
这些更改可以解决在Android 12+上使用BLE扫描时的崩溃问题。