美文网首页
Android蓝牙第三方库FastBle使用注意事项(需开启GP

Android蓝牙第三方库FastBle使用注意事项(需开启GP

作者: 贝克街亡灵 | 来源:发表于2020-05-28 10:24 被阅读0次

纯手打,不喜勿喷 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("请开启相应权限")
                    }
                }
    }
device-2020-05-28-102601.png

相关文章

网友评论

      本文标题:Android蓝牙第三方库FastBle使用注意事项(需开启GP

      本文链接:https://www.haomeiwen.com/subject/szdoahtx.html