当前位置:   article > 正文

Android-蓝牙开发:解决华为P40(鸿蒙系统)搜索不到蓝牙设备_android开发 搜索不到 鸿蒙系统的蓝牙

android开发 搜索不到 鸿蒙系统的蓝牙

参考:

Android-蓝牙开发:解决搜索不到蓝牙设备_van久的博客-CSDN博客_android 蓝牙不能搜索

现象:

之前用java开发的一个APP,一直都是用华为的荣耀6plus来调试,运行得非常好,APP内就可以搜索蓝牙设备。但是,最后用华为P40(鸿蒙系统)来调试,就发现了一个新问题,APP内搜索不到蓝牙设备了,当然,其它功能还是正常的,比如,仍然可以连接蓝牙。

解决方法:

Android M 以上版本需要显式获取授权,附授权代码:

在AndroidManifest.xml中添加权限:

  1. <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  2. <uses-permission android:name="android.permission.BLUETOOTH" />
  3. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  4. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  5. <!-- <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />-->
  6. <!-- <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />-->
  7. <!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />-->

在activity中调用getPermission()方法取得权限:

  1. /**
  2. * 解决:无法发现蓝牙设备的问题
  3. *
  4. * 对于发现新设备这个功能, 还需另外两个权限(Android M 以上版本需要显式获取授权,附授权代码):
  5. */
  6. private final int ACCESS_LOCATION=1;
  7. @SuppressLint("WrongConstant")
  8. private void getPermission() {
  9. if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
  10. int permissionCheck = 0;
  11. permissionCheck = this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
  12. permissionCheck += this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION);
  13. if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
  14. //未获得权限
  15. this.requestPermissions( // 请求授权
  16. new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
  17. Manifest.permission.ACCESS_COARSE_LOCATION},
  18. ACCESS_LOCATION);// 自定义常量,任意整型
  19. }
  20. }
  21. }
  22. /**
  23. * 请求权限的结果回调。每次调用 requestpermissions(string[],int)时都会调用此方法。
  24. * @param requestCode 传入的请求代码
  25. * @param permissions 传入permissions的要求
  26. * @param grantResults 相应权限的授予结果:PERMISSION_GRANTED 或 PERMISSION_DENIED
  27. */
  28. @Override
  29. public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  30. switch (requestCode) {
  31. case ACCESS_LOCATION:
  32. if (hasAllPermissionGranted(grantResults)) {
  33. Log.i(TAG, "onRequestPermissionsResult: 用户允许权限");
  34. } else {
  35. Log.i(TAG, "onRequestPermissionsResult: 拒绝搜索设备权限");
  36. }
  37. break;
  38. }
  39. }
  40. private boolean hasAllPermissionGranted(int[] grantResults) {
  41. for (int grantResult : grantResults) {
  42. if (grantResult == PackageManager.PERMISSION_DENIED) {
  43. return false;
  44. }
  45. }
  46. return true;
  47. }

最后,把动态获取蓝牙权限的代码放在MainActivity.java-->onCreate() 里,也就是,一启动APP就获取,这样最好。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/291769
推荐阅读
相关标签
  

闽ICP备14008679号