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

参考:

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就获取,这样最好。

华为P40 Pro ELS工程系统烧录包是一种针对该手机型号定制的软件程序包,用于在手机上安装和更新工程系统。 工程系统是专为开发和测试手机功能的团队或个人而设计的。它提供了更高级的调试功能和系统访问权限,以便于软件开发人员进行更深入的调试和测试工作。 华为P40 Pro ELS工程系统烧录包可以通过连接手机到计算机,利用一些专门的工具和软件来进行烧录。首先,需要下载相应的烧录软件和工程系统烧录包。然后,通过USB线将手机与计算机连接起来,并确保手机处于开发者模式下。 接下来,打开烧录软件,选择华为P40 Pro ELS工程系统烧录包,并按照软件的指示进行烧录。这个过程可能需要一些时间,具体取决于烧录包的大小和手机的性能。 完成烧录后,手机会自动重启,并安装新的工程系统。在这个系统下,用户将能够访问更多的调试功能和系统权限,同时也会看到一些以前不可见的开发者选项和配置。 需要注意的是,华为P40 Pro ELS工程系统烧录包只适用于专业人士或开发者,普通用户不建议安装和使用。同时,在烧录之前,请备份手机上的重要数据,以防意外情况发生。 总的来说,华为P40 Pro ELS工程系统烧录包是一种专为开发和测试目的而设计的软件程序包,能够提供更高级的调试功能和系统访问权限。通过连接手机到计算机,并利用专门的工具和软件进行烧录,用户可以安装和更新工程系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值