纯手打,不喜勿喷 long may the sun shine
由于项目需要,今天打开了一个旧项目,想看看其中的搜索附近的蓝牙这个功能。但是尝试了很多次之后,发现仍然搜索不到任何蓝牙设备。这个项目蓝牙功能我是用了FastBle,于是我下载了FastBle最新版本的Demo,发现跟我当时写的相比多了下面一段代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !checkGPSIsOpen()) {
new AlertDialog.Builder(this)
.setTitle(R.string.notifyTitle)
.setMessage(R.string.gpsNotifyMsg)
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setPositiveButton(R.string.setting,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE_OPEN_GPS);
}
})
.setCancelable(false)
.show();
} else {
setScanRule();
startScan();
}
private boolean checkGPSIsOpen() {
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
if (locationManager == null)
return false;
return locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_OPEN_GPS) {
if (checkGPSIsOpen()) {
setScanRule();
startScan();
}
}
}
原来Android.M以上的蓝牙使用需要开放系统的GPS定位权限。
加上这部分代码后,很奇怪的是依旧无法搜索到蓝牙设备。仔细思考之后发现,由于项目时间太长,已经不记得动态请求权限的问题了。把动态权限请求加上就可以了,这部分功能使用了RxPermission:
fun requestPermission() {
RxPermissions(this@SplashActivity)
.request(Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA)
.subscribe {
if (it) {
if (LoginUtils.isLogin()) {
if (LoginUtils.getFishTankNo().isNullOrEmpty()) {
startActivity<DeviceManageActivity>()
} else
startActivity<MainActivityP>()
} else {
startActivity<LoginActivity>()
}
finish()
} else {
ToastUtils.showShort("请开启相应权限")
}
}
}

网友评论