精华内容
下载资源
问答
  • Android10 BLE蓝牙4.0扫描不到设备

    千次阅读 2020-05-04 17:04:53
    在Android 6.0及以上版本中开启蓝牙扫描扫描不到数据问题 在Android 6.0之前的版本中能够完美运行,但换到Android 6.0 及以上系统的手机运行时搜索不到数据。 这是因为在Android 6.0及以上系统中低功耗蓝牙添加了...

    在Android 6.0及以上版本中开启蓝牙扫描后扫描不到数据问题
    在Android 6.0之前的版本中能够完美运行,但换到Android 6.0 及以上系统的手机运行时搜索不到数据。
    这是因为在Android 6.0及以上系统中低功耗蓝牙添加了距离检测功能,所以扫描时需要开启定位功能权限,在更高版本中甚至需要开启精准定位权限

        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
     // Android 6.0动态请求权限
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE
                        , Manifest.permission.READ_EXTERNAL_STORAGE
                        , Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION};
                for (String str : permissions) {
                    if (checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
                        requestPermissions(permissions, 111);
                        break;
                    }
                }
            }
        }
    

    把各种权限问题解决之后,在Android 6.0之前扫描没问题,在之后扫描不到数据问题也随之解决

    展开全文
  • Android蓝牙扫描不到

    2020-09-04 21:27:23
    无法扫描到周围的蓝牙设备 private ScanCallback scanCallback=new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { super.onScanResult(c

    项目场景:

    项目场景:通过蓝牙芯片(HC-05)或低功耗蓝牙(BLE)与手机 APP 通信,传输传感器数据


    问题描述:

    无法扫描到周围的蓝牙设备

    private ScanCallback scanCallback=new ScanCallback() {
    
            @Override
            public void onScanResult(int callbackType, ScanResult result) {
                super.onScanResult(callbackType, result);
                BluetoothDevice device=result.getDevice();
                //callbackType回调类型,什么类型会触发回调
                //result扫描得到的结果,不包含传统蓝牙
                Log.i(TAG,"NAME:"+device.getName()+",ADDR:"+device.getAddress());
                if(startScanning){
                Log.i(TAG,"connect LED:"+device.getName()+"ADDR"+device.getAddress());
                startScanning=false;
                bluetoothGatt=device.connectGatt(MainActivity.this, false, new MainActivity.BluetoothGattCallback());
                }
            }
        };
        private void scanLeDevice(boolean enable){
            bluetoothDeviceList.clear();
            mBluetoothLeScanner=mBluetoothAdapter.getBluetoothLeScanner();
            if(mBluetoothLeScanner==null){
                Log.i(TAG,"blescan is null");
            }
            if(enable){
                Log.i(TAG,"start scanning");
                //因为蓝牙扫描需要消耗较多电量,所以要定义扫描时间
                //handler对象post方法将run中放在当前线程的消息队列,没有创建子线程
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //延迟后执行该部分,中断扫描
                        mScanning=false;
                        Log.i(TAG,"stopScan");
                        mBluetoothLeScanner.stopScan(scanCallback);
                    }
                },SCAN_PERIOD);
                //先打开扫描
                mScanning=true;
                Log.i(TAG,"startScan");
                mBluetoothLeScanner.startScan(scanCallback);
            }
            else{
                //关闭扫描
                mScanning=false;
                mBluetoothLeScanner.stopScan(scanCallback);
            }
        }
    

    原因分析:

    如果目标运行版本太高需要调用一些权限,否则蓝牙受影响。

    总共3种权限注意(打开1、2前两个):

    1. APP的定位权限,特别注意这个权限是APP应用管理里面的那个位置权限。
    2. 手机的GPS打开
    3. APP的精确定位权限(因为未使用太高平台,因此未遇到过动态开启精确定位权限)

    解决方案:

    我使用的方案:既然是版本升级带来的权限细分,那么我们直接修改build.gradle,将targetSdkVersion改为27,问题解决。

    另一种方案(未使用,不确定是否可行):参考的地址

    //对高版本平台,设置精确定位权限
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
                Log.i(TAG, "sdk < 28 Q");
                if (ActivityCompat.checkSelfPermission(this,
                        Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                        || ActivityCompat.checkSelfPermission(this,
                        Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    String[] strings =
                            {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
                    ActivityCompat.requestPermissions(this, strings, 1);
                }
            } else {
                if (ActivityCompat.checkSelfPermission(this,
                        Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                        || ActivityCompat.checkSelfPermission(this,
                        Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                        || ActivityCompat.checkSelfPermission(this,
                        "android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {
                    String[] strings = {android.Manifest.permission.ACCESS_FINE_LOCATION,
                            android.Manifest.permission.ACCESS_COARSE_LOCATION,
                            "android.permission.ACCESS_BACKGROUND_LOCATION"};
                    ActivityCompat.requestPermissions(this, strings, 2);
                }
            }
    
    /*
    *同时高版本平台还需要开启GPS权限,因为无法强制调用,因此只能提示
    */
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
                LocationManager alm = (LocationManager)BLEActivity.this.getSystemService(Context.LOCATION_SERVICE);
                if (!alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)){
                    Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show();
                }
            }

     

    展开全文
  • 最近搞了搞蓝牙,我在蓝牙设备上定时...然而我使用电脑和iphone手机却可以接收到被安卓手机连接的蓝牙设备的广播0 0,用另一部安卓手机扫描不到设备广播。。。这是安卓本身的原因吗?如果可以解决,应该如何解决
  • 扫描周围蓝牙设备

    2021-01-10 07:40:15
    <div><p>手机自带的蓝牙扫描与软件...而且软件有好多都扫描不到,蓝牙名称也获取不到。 手机是Android6.0的魅族手机 求大神解答。。。。。</p><p>该提问来源于开源项目:Jasonchenlijian/FastBle</p></div>
  • 在Android6.0手机扫描不到蓝牙设备(如Nexus6),并会抛出一个异常: java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results

    描述:在Android6.0手机上扫描不到蓝牙设备(如Nexus6),并会抛出一个异常:

     java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results
    	 at android.os.Parcel.readException(Parcel.java:1599)
    	 at android.os.Parcel.readException(Parcel.java:1552)
    	 at android.bluetooth.IBluetoothGatt$Stub$Proxy.startScan(IBluetoothGatt.java:772)
    	 at android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper.onClientRegistered(BluetoothLeScanner.java:324)
    	 at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:56)
    	 at android.os.Binder.execTransact(Binder.java:453)


    解决办法:
    1,在清单文件加入权限:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    2,在Activity中调用 requestPermissions() 方法来请求权限,系统会弹出需要请求权限的对话框
    3,重写Activity的onRequestPermissionsResult()方法,接收权限是否请求的请求状态
    示例代码如下:

    private static final int PERMISSION_REQUEST_COARSE_LOCATION = 1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ......
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // Android M Permission check
            if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
            }
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_COARSE_LOCATION:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // TODO request success
                }
            break;
        }
    }

    注:
    第2、3步骤在targetSdkVersion大于等于23(6.0)时必须添加,小于23时可以不用添加。所以另外一种处理办法是只加权限,然后把targetSdkVersion设置到23以下也能达到同样的效果,不过用户可以在权限管理中禁止了该权限,一样会搜不到设备。
    另外在Android 6.0上对应用权限进行授权是发生在应用运行时,而不是在安装时。同时用户也可以在应用程序设置中撤销对应用的权限授权。因此当要获取敏感权限(如相机、联系人)时最好先检查用户是否授予了改权限,如果没授予给出提示框提醒用户授予。
    参考文章:http://developer.radiusnetworks.com/2015/09/29/is-your-beacon-app-ready-for-android-6.html
    
    
    展开全文
  • 目前待的这家公司是做智能家居的,最近客户那边有反馈说为什么我的手机蓝牙也打开了,设备的蓝牙也打开了,为啥总是扫描不到呢,但是我们公司的测试人员几经排查,并未发现客户的所描述的扫描不到设备,但客户所说的...
  • 目前待的这家公司是做智能家居的,最近客户那边有反馈说为什么我的手机蓝牙也打开了,设备的蓝牙也打开了,为啥总是扫描不到呢,但是我们公司的测试人员几经排查,并未发现客户的所描述的扫描不到设备,但客户所说的...

    目前待的这家公司是做智能家居的,最近客户那边有反馈说为什么我的手机蓝牙也打开了,设备的蓝牙也打开了,为啥总是扫描不到呢,但是我们公司的测试人员几经排查,并未发现客户的所描述的扫描不到设备,但客户所说的问题确实又存在,几经周折,找到了原因,原来是现在市场上出来的android6.0手机需要添加两个权限,android官网也已经说明了,直接上图

    这里写图片描述

    具体权限官网说的很清楚了

    解决办法

    Android6.0设备通过蓝牙和Wi-Fi扫描访问外部硬件设备时,你的应用需要添加ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION权限。

    展开全文
  • Andriod8.0扫描不到BLE设备的原因

    千次阅读 热门讨论 2017-11-16 16:44:10
    昨天尝鲜升级了一次手机系统,把系统升级到了Android8.0。今天测试的时候意外发现扫描不到自己的蓝牙小...2. Android8.0+系统蓝牙扫描不到设备A,但是可以正常扫描到苹果手表和小米手环2. 3. Android(其他版本)+ n
  • 我是新来的android和我正在与...当我开始扫描时,它什么都做。Android上的蓝牙:StartDiscovery无法正常工作。无法扫描设备我使用的是onclicklistner开始扫描:bt.setOnClickListener(new OnClickListener() {@...
  • Android-配置了定位权限还是无法扫描到附近的蓝牙设备? 不想看废话的同学,请注意你的手机是不是Andorid10 或者更高,如果是的话,请看看是不是没有添加...为什么还是扫描不到附近的蓝牙设备呢? 不知道你是不是也遇到
  • 蓝牙扫描 LeScanCallback 方法 回调

    千次阅读 2017-04-24 13:41:54
    问题设备: 华为 p9 Plus Android 版本7.0 ...今天写 BLE 的 demo 发现 自己的手机不到周围设备 mBluetoothAdapter.startLeScan(callBack); 没有回调方法 当然,同样的程序在其他手机(试了小米 和 另一款华为) 就运
  • 显示出来,比如附近的手机,血压计等都扫描出来.同时比如如果有两台体重秤的话,一台离的近,一台离的远,我需要把 离得近的体重秤,在显示的时候,优先显示在上面.根据离扫描设备的距离,做个倒序排序: 这里有个不好...
  • 现在的FlutterBlue在安卓手机上很难搜索连接,在iOS上是没问题的,进行下列更改可以快速修复这个问题,但是会损失掉一些功能,能通过指定Service的UUID搜索到设备(因为uuids数组被改成了[])。 懒人可以直接用我...
  • <div><p>BtHelperClient: prepare to connect: FC:64:BA:94:23:96 小米手机 11-24 14:34:55.926 21733-9464/com.uniview.mybluetooth W/BluetoothAdapter: getBluetoothService() called with no ...
  • //设置扫描到设备的委托 [baby setBlockOnDiscoverToPeripherals:^(CBCentralManager *central, CBPeripheral *peripheral, NSDictionary *advertisementData, NSNumber *RSSI) { NSLog(@"搜索到了设备:%...
  • 手机蓝牙问题求解

    2021-03-22 19:18:04
    我在做一个移动设备,需要用到蓝牙模块,这个模块工作时需要对手机蓝牙信号进行扫描,现在结果发现苹果和三星手机只有进入蓝牙界面后才能被设备搜索,而国产手机在任何开机情况下都可以被搜索。因为技术太菜,...
  • 在使用babybluetooth是扫描不到设备的,因为手机和ipad只是打开了蓝牙设备的电源而已,并没有发送广播,如果想扫描到设备,需要编程的方式,通过iphone或ipad,mac发送蓝牙广播...
  • 如何判断蓝牙设备类型

    千次阅读 2019-12-07 18:58:19
    我们在开发Android的蓝牙应用时,可能需要知道扫描到的蓝牙设备是什么类型,然后过滤掉符合要求的设备,只保留符合要求的设备,例如我们在车载系统上开发蓝牙电话应用时,我们希望只显示手机蓝牙设备,那么如何从...
  • 前一阵帮别人做个蓝牙的Android程序,调试的好好的, 用的自己的老手机,android 5.1、8.0的都是好好的能够搜索,但是交付过去,对方的华为p30 Android 10手机就是不行,这是什么原因呢,一阵挠头。。 分析 如要查找...
  • 近期做一个扫描附近低功耗蓝牙设备获取rssi并进行一系列的相对的定位的功能。在开发前期一直使用低版本(Android6.0以下)的手机进行测试,没有任何问题。在运行Android6.0的手机上后,出了一个问题。 每当扫描...
  • 安装官方Demo时,如果发现搜索不到设备,需要到手机设置界面给官方Demo开启定位权限,因为官方Demo没有动态获取权限,也可以自己在官方Demo上添加几行代码,实现动态获取定位权限。如何获取定位权限可以参考Android...
  • 在做OAD无线升级处理的时候遇到一个问题,从imageA状态升级imageB状态,但是安卓的设备扫描的服务的UUID都没有发生变化(imageA服务的UUID和imageB服务的UUID不同),安卓设备扫描的服务的UUID还是原来的升级前...
  • 微信小程序连接蓝牙设备

    千次阅读 2018-11-08 15:13:44
    部分oppo和vivo手机要把定位也打开,否则搜索不到附近蓝牙设备(比如我坑爹的oppoR11就必须把定位和蓝牙都打开才行) 下面直接上代码,复制粘贴就行,然后点击“开始扫描”(目前我知道苹果手表是低功耗设备,大家...
  • 手机端修改packages/apps/Bluetooth/res/values/config.xml文件中strict_location_check的值由true改为false,用户在进行扫描LE设备时则可以返回给APP。从而需要用户强制打开GPS。
  • 蓝牙开发的时候,扫描外设的方法扫描到的设备只能是没有被连接...方法扫描到,一开始的手自己也没有注意到这个问题,结果在老板使用的工程中,老是出现系统已经连接上蓝牙设备了,然后就找不到设备了的情况,无奈,是
  • iOS 蓝牙设备开发小结

    2015-12-14 10:55:00
    最近需要为一款手环开发一个app,之前也开发过手环,但是...打开手机app,扫描蓝牙设备扫描到手环以后连接手环,手环上传数据。这个时候,手机就是中心设备(Central),而手环就叫做外围设备(Peripheral)。 直...
  • 今天碰到一个问题, 1. 更新了蓝牙BLE 设备的程序,添加了一个Service的Characteristics.  2. 用andriod的手机测试很正常 3.用ios的手机或者Macbook pro上的...google 也Google 不到。 后来找到Mac的System Pr
  •  编译之后运行没有报错,但是还是搜索不到蓝牙设备,然后又百度了一番,看到一篇文章说要搜到6.0系统上的蓝牙服务要和位置服务都打开才能搜索! 于是打开手机上的位置服务,就能够搜索到了! 参考:...
  • 升级Android6.0 后app无法扫描ble设备

    千次阅读 2015-10-16 18:45:25
    最近手机收到google ota的推送升级到6.0 。但是发现再也搜索不到ble设备了。但是系统蓝牙却能收到。 解决方法:居然开启定位就可以了。

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

手机蓝牙扫描不到设备