目录

一、问题描述

二、排查过程

1.电脑端的安卓开发版本

2.设备的安卓版本

三、问题分析 

四、解决办法

1.换用Android5.0的设备

2. 加几行权限申请代码。

1.首先在AndroidManifest.xml里面加以下权限代码。

2.其次在程序的主入口添加如下代码,用以询问用户是否开启定位权限。

​五、Result


一、问题描述

    公司的源代码编译install到设备后,在蓝牙搜索列表找不到节点的名称信息,进而无法进行后续的温湿度测量、光照测量等操作。

    公司给的代码可以在Android5.0直接运行。但是更高的版本则无法运行。 

二、排查过程

1.电脑端的安卓开发版本

经过排查,与电脑端的安卓Sdk版本关系不大,只要不是太老的Sdk版本即可。(PS:本人电脑的Sdk版本为AndroidAPI32)

2.设备的安卓版本

只需满足:手机或Pad的安卓版本对应的API版本不能比 bulid.gradle下的miSdk限制更小。(如下图所示)

三、问题分析 

   蓝牙分为经典蓝牙和低功耗蓝牙,我们需要开发的是低功耗蓝牙。

   通过查阅官方API,发现Android6.0以上版本低功耗蓝牙BluetoothGATT发生了一些区别,加入了距离检测的功能,也就是使用的时候需要手动开启定位权限。

四、解决办法

1.换用Android5.0的设备

公司给的代码可以直接在Android5.0上运行。因此可以换相应的设备。

2. 加几行权限申请代码。

以下方法仅在Android7.0设备上进行调试无误。

1.首先在AndroidManifest.xml里面加以下权限代码。

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- ACCESS_FINE_LOCATION:允许一个程序访问精确位置(如GPS) -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- ACCESS_COARSE_LOCATION:允许一个程序访问CellID或WiFi热点来获取大致的位置 -->

2.其次在程序的主入口添加如下代码,用以询问用户是否开启定位权限。

除了把报红的地方的class导入,还要设置一个常量值。(效果如下图)

   //添加如下代码,并且为 PERMISSIONS_REQUEST_CODE_ACCESS常量赋值1
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
                checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.CAMERA,}, PERMISSIONS_REQUEST_CODE_ACCESS);
        }

3.第三期培训视频

第三期培训视频里面说将targetAPI改成22什么的,没试过,不知道是否可行。

五、Result

程序需要手动开启定位权限。

搜索到了蓝牙设备名称,且功能正常。 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐