赞
踩
参考:
Android-蓝牙开发:解决搜索不到蓝牙设备_van久的博客-CSDN博客_android 蓝牙不能搜索
之前用java开发的一个APP,一直都是用华为的荣耀6plus来调试,运行得非常好,APP内就可以搜索蓝牙设备。但是,最后用华为P40(鸿蒙系统)来调试,就发现了一个新问题,APP内搜索不到蓝牙设备了,当然,其它功能还是正常的,比如,仍然可以连接蓝牙。
Android M 以上版本需要显式获取授权,附授权代码:
在AndroidManifest.xml中添加权限:
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
- <uses-permission android:name="android.permission.BLUETOOTH" />
-
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
-
- <!-- <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />-->
- <!-- <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />-->
- <!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />-->
在activity中调用getPermission()方法取得权限:
-
- /**
- * 解决:无法发现蓝牙设备的问题
- *
- * 对于发现新设备这个功能, 还需另外两个权限(Android M 以上版本需要显式获取授权,附授权代码):
- */
- private final int ACCESS_LOCATION=1;
- @SuppressLint("WrongConstant")
- private void getPermission() {
- if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
- int permissionCheck = 0;
- permissionCheck = this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
- permissionCheck += this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION);
-
- if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
- //未获得权限
- this.requestPermissions( // 请求授权
- new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_COARSE_LOCATION},
- ACCESS_LOCATION);// 自定义常量,任意整型
- }
- }
- }
-
- /**
- * 请求权限的结果回调。每次调用 requestpermissions(string[],int)时都会调用此方法。
- * @param requestCode 传入的请求代码
- * @param permissions 传入permissions的要求
- * @param grantResults 相应权限的授予结果:PERMISSION_GRANTED 或 PERMISSION_DENIED
- */
- @Override
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
- switch (requestCode) {
- case ACCESS_LOCATION:
- if (hasAllPermissionGranted(grantResults)) {
- Log.i(TAG, "onRequestPermissionsResult: 用户允许权限");
- } else {
- Log.i(TAG, "onRequestPermissionsResult: 拒绝搜索设备权限");
- }
- break;
- }
- }
-
- private boolean hasAllPermissionGranted(int[] grantResults) {
- for (int grantResult : grantResults) {
- if (grantResult == PackageManager.PERMISSION_DENIED) {
- return false;
- }
- }
- return true;
- }
最后,把动态获取蓝牙权限的代码放在MainActivity.java-->onCreate() 里,也就是,一启动APP就获取,这样最好。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。