精华内容
下载资源
问答
  • 在低功耗蓝牙(BLE)开发过程中碰到过不少坑,作为记录总结一下在开发过程中关于开启扫描遇到的问题。 开发低功耗蓝牙过程中因为Android系统的不断升级和优化,关于BLE的开发也会在升级过程中遇到不同的问题。关于...

            在低功耗蓝牙(BLE)开发过程中碰到过不少坑,作为记录总结一下在开发过程中关于开启扫描遇到的问题。

            开发低功耗蓝牙过程中因为Android系统的不断升级和优化,关于BLE的开发也会在升级过程中遇到不同的问题。关于开启扫描问题总结如:

    • 在开发过程中关闭扫描后再开启扫描不成功问题

            在开发过程中不可避免的会遇到关闭扫描开启扫描如此重复操作的问题,但在某些时候会出现关闭后无法再开启扫描的问题。

    E/BtGatt.GattService: App 'com.bluetooth.app' is scanning too frequently 

            这时问题就是你开启扫描功能太频繁了,导致系统吃不消导致的,遇到这种情况你需要在关闭扫描之后至少停止2秒钟,然后再次调用开启扫描方法,开启成功。

    • 在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" />

     在代码中也需要申请动态权限

     //清单文件里面也需要配置
            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);
            }

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

    • Android 8.1及以上系统后台模式无法开启扫描问题

            在Android 8.1 及以上系统中,正常状况下扫描蓝牙没有问题,但是当App处于后台时,无法开启扫描方法并有如下提示

            BtGatt.ScanManager: Cannot start unfiltered scan in screen-off. This scan will be resumed later: 9

    这是因为你开启的扫描扫描方法是没有设置扫描过滤器的问题,在Android 8.1及以上系统中在后台模式中开启扫描必须要关联扫描过滤器,如此才能在后台模式下完美运行

        //设置蓝牙扫描过滤器集合
        private List<ScanFilter> scanFilterList;
        //设置蓝牙扫描过滤器
        private ScanFilter.Builder scanFilterBuilder;
        //设置蓝牙扫描设置
        private ScanSettings.Builder  scanSettingBuilder;
    
      
        private List<ScanFilter> buildScanFilters() {
            scanFilterList = new ArrayList<>();
            // 通过服务 uuid 过滤自己要连接的设备   过滤器搜索GATT服务UUID
            scanFilterBuilder = new ScanFilter.Builder();
            ParcelUuid parcelUuidMask = ParcelUuid.fromString("FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF");
            ParcelUuid parcelUuid = ParcelUuid.fromString("00001800-0000-1000-8000-00805f9b34fb");
            scanFilterBuilder.setServiceUuid(parcelUuid, parcelUuidMask);
            scanFilterList.add(scanFilterBuilder.build());
            return scanFilterList;
        }
    
        private ScanSettings buildScanSettings() {
            scanSettingBuilder = new ScanSettings.Builder();
            //设置蓝牙LE扫描的扫描模式。
            //使用最高占空比进行扫描。建议只在应用程序处于此模式时使用此模式在前台运行
            scanSettingBuilder.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY);
            //设置蓝牙LE扫描滤波器硬件匹配的匹配模式
            //在主动模式下,即使信号强度较弱,hw也会更快地确定匹配.在一段时间内很少有目击/匹配。
            scanSettingBuilder.setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE);
            //设置蓝牙LE扫描的回调类型
            //为每一个匹配过滤条件的蓝牙广告触发一个回调。如果没有过滤器是活动的,所有的广告包被报告
            scanSettingBuilder.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES);
            return scanSettingBuilder.build();
        }
    
    
        //调用开启扫描方法
        mBluetoothAdapter.getBluetoothLeScanner().startScan(buildScanFilters(), buildScanSettings(), mLeScanCallback);

     根据实际情况设置相应的参数设置,调用添加过滤设置和扫描设置的扫描方法,即在后台状态下依然可以开启扫描功能。

    通过本文记录一下在开发过程中遇到的开启扫描在不同版本中遇到的问题及解决方法。

     

    展开全文
  • 截止本文完成的日期为止(2020年04月16日),笔者对Android 5.0~Android 10的部分手机进行了适配测试。该文中所遇到的问题基本都出现在国产定制系统(EMUI、MIUI、ColorOS)上。开发环境为macOS+idea。 二、相关...

    一、前言

    截止到本文完成的日期为止(2020年04月16日),笔者对Android 5.0~Android 10的部分手机进行了适配测试。该文中所遇到的问题基本都出现在国产定制系统(EMUI、MIUI、ColorOS)上。开发环境为macOS+idea。

    二、相关代码

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <uses-feature
            android:name="android.hardware.bluetooth_le"
            android:required="true" />
    
    • *BLE的扫描需要开启位置信息相关的权限,否则将会无法扫描到BLE设备。

      *在MIUI11(Android 10)中,需要另行打开位置服务(GPS),否则也不能扫描到BLE设备。部分其它国产ROM在Android 10也可能存在此问题,解决办法同上。判断标准是:BluetoothLeScanner被正确地实例化(不为null),但始终无法发现附近的BLE设备。

    • 2、(Android 6.0及以上)在onCreate中动态申请位置信息权限:

    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
        Log.i(TAG, "sdk < Android M");
        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);
        }
    }
    

    检测是否打开位置服务:

    public static final boolean isLocationEnable(Context context) {
        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        boolean networkProvider = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        boolean gpsProvider = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if (networkProvider || gpsProvider) return true;
        return false;
    }
    

    如果未打开位置服务,让用户去打开:

    private static final int REQUEST_CODE_LOCATION_SETTINGS = 2;
    private void setLocationService() {
        Intent locationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        this.startActivityForResult(locationIntent, REQUEST_CODE_LOCATION_SETTINGS);
    }
    

    进入设置,让用户自己选择是否打开位置服务,然后获取选择结果:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE_LOCATION_SETTINGS) {
            if (isLocationEnable(this)) {
                //定位已打开的处理
            } else {
                //定位依然没有打开的处理
            }
        } else super.onActivityResult(requestCode, resultCode, data);
    } 
    

    3、(基本)检测是否支持BLE蓝牙及蓝牙开关状态

    //是否支持
    public static boolean isSupportBle(Context context) {
          if (context == null || !context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
              return false;
          }
          BluetoothManager manager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
          return manager.getAdapter() != null;
    }
    //是否开启
    public static boolean isBleEnable(Context context) {
          if (!isSupportBle(context)) {
              return false;
          }
          BluetoothManager manager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
          return manager.getAdapter().isEnabled();
    }
    //开启蓝牙
    public static void enableBluetooth(Activity activity, int requestCode) {
          Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
          activity.startActivityForResult(intent, requestCode);
    }
    

    4、(基本&&Android 7.0+适配特别注意!)进行BLE设备扫描

    在Android 7.0及以后的系统中,BluetoothAdapter.startLeScan()方法被废弃,所以需要根据系统版本的不同来执行不同的扫描方法,否则在MIUI11及EMUI10的部分机型上会扫描不到BLE设备。

        private void startScan() throws Exception {
            isScanning = true;
            handler.postDelayed(scanRunnable, TIME_OUT);
            BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
                LogUtil.e("系统版本:","<7.0");
                bluetoothManager.getAdapter()
                        .startLeScan(mLeScanCallback);
            } else {//安卓7.0及以上的方案
                LogUtil.e("系统版本:",">=7.0");
                bleScanner = bluetoothManager.getAdapter().getBluetoothLeScanner();
                bleScanner.startScan(scanCallback);
            }
        }
    
    //停止扫描
        private void stopScan() {
            isScanning = false;
            BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
                //安卓6.0及以下版本BLE操作的代码
                bluetoothManager.getAdapter().stopLeScan(mLeScanCallback);
            } else
                //安卓7.0及以上版本BLE操作的代码
                bleScanner.stopScan(scanCallback);
        }
    
    //扫描结果回调-Android 7.0-
        private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
            @SuppressLint("HandlerLeak")
            @Override
            public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
                LogUtil.e(TAG, "开始搜索设备:" + mac);
                if (device.getAddress().equals(mac)) {
                    LogUtil.e(TAG, "搜索到设备 " + mac);
                    new Handler() {
                        @Override
                        public void handleMessage(Message msg) {
                            if (mBluetoothLeService != null) {
                                mBluetoothLeService.connect(mac);
                            }
                        }
                    }.sendEmptyMessageDelayed(3000, 200);
                    stopScan();
                    isScanning = false;
                    handler.removeCallbacks(scanRunnable);
                }
            }
        };
    
    //扫描结果回调-7.0+
        private ScanCallback scanCallback = new ScanCallback() {
            @SuppressLint("HandlerLeak")
            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onScanResult(int callbackType, ScanResult result) {
                super.onScanResult(callbackType, result);
                BluetoothDevice device = result.getDevice();
                String macAddr = device.getAddress();
                LogUtil.e("发现设备:", macAddr);
                if (macAddr.equals(mac)) {
                    LogUtil.e(TAG, "搜索到匹配的蓝牙设备(6.0+): " + mac);
                    new Handler() {
                        @Override
                        public void handleMessage(Message msg) {
                            if (mBluetoothLeService != null) {
                                mBluetoothLeService.connect(mac);
                            }
                        }
                    }.sendEmptyMessageDelayed(3000, 200);
                    stopScan();
                    isScanning = false;
                    handler.removeCallbacks(scanRunnable);
                }
                Log.i(TAG, macAddr);
            }
        };
    
    //重连计时器
    private Runnable scanRunnable = new Runnable() {
            @Override
            public void run() {
                connTimeOutTimes++;
                LogUtil.e(TAG, "重连第" + connTimeOutTimes + "次");
                if (connTimeOutTimes < RECONNECT_TIMES) {
                    handler.postDelayed(scanRunnable, TIME_OUT);
                } else {
                    stopScan();
                    connTimeOutTimes = 0;
                    if (connectFunction != null) {
                        LogUtil.e(TAG, "连接超时:" + mBluetoothLeService.getConnectState());
                        connectFunction.onCallBack("{\"code\":-1,\"msg\":\"连接超时\",\"data\":\"false\"}");
                        connectFunction = null;
                    }
                    if (cardConnectFunction != null) {
                        cardConnectFunction.onCallBack("{\"code\":-1,\"msg\":\"连接超时\",\"data\":\"false\"}");
                        cardConnectFunction = null;
                    }
                    mBluetoothLeService.setConnectionState(0);
                    mBluetoothLeService.release();
                    bindStatus = 0;
                }
            }
        };
    

    三、踩过坑的机型/ROM

    • 1、小米/红米

      MIUI11:必须打开位置服务才可搜索到BLE设备;

      MIUI11及更早:

      初始化BlueToothGatt时务必将connectGatt的autoConnect设为false,否则会被系统杀掉;

    package android.bluetooth;
    public final class BluetoothDevice implements Parcelable {
    ...
    public BluetoothGatt connectGatt(Context context, boolean autoConnect,
                BluetoothGattCallback callback) {
            return (connectGatt(context, autoConnect, callback, TRANSPORT_AUTO));
        }
    }
    

    必须针对Android M及以上的MIUI配置调用BluetoothLeScanner.startScan()方法来搜索BLE设备,而非被废弃的BluetoothAdapter.startLeScan(),否则将无法搜索到设备,日志如下:

    D/BluetoothAdapter: startLeScan(): null					**注意,此处为null
    D/BluetoothAdapter: isLeEnabled(): ON
    D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=6 mScannerId=0
    
    • 2、华为/荣耀

      EMUI10(仅Mate 30/P30系列):必须打开位置服务才可搜索到BLE设备

    • 3、部分国产ROM(包括上述两类):

      部分机型需打开位置服务才可搜索到BLE设备;

      部分机型需动态申请位置权限才可搜索到BLE设备;

      部分机型需将connectGatt的autoConnect设为false(MIUI、ColorOS);

      部分机型需针对Android M及以上的系统版本配置调用BluetoothLeScanner.startScan()方法来搜索BLE设备;

    四、附录:连接日志(MIUI)

    E/系统版本:: >=6.0
    D/BluetoothAdapter: isLeEnabled(): ON
    D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=8 mScannerId=0
    E/发现设备:: xx:xx:xx:xx:xx:xx
    E/WebViewActivity: 搜索到匹配的蓝牙设备(6.0+): xx:xx:xx:xx:xx:xx
    D/BluetoothAdapter: isLeEnabled(): ON
    I/WebViewActivity: xx:xx:xx:xx:xx:xx
    E/BlueToothService: xx:xx:xx:xx:xx:xx
    D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=7 device=xx:xx:xx:xx:xx:xx
    D/BluetoothGatt: discoverServices() - device: xx:xx:xx:xx:xx:xx
    E/WebViewActivity: 连接成功:2
    D/BluetoothGatt: onConnectionUpdated() - Device=xx:xx:xx:xx:xx:xx interval=6 latency=0 timeout=500 status=0
    D/BluetoothGatt: onSearchComplete() = Device=xx:xx:xx:xx:xx:xx Status=0
    D/BluetoothGatt: setCharacteristicNotification() - uuid: 0000fff4-xxxx-xxxx-xxxx-00xxxx9bxxxx enable: true
    D/BluetoothGatt: onConnectionUpdated() - Device=xx:xx:xx:xx:xx:xx interval=36 latency=0 timeout=500 status=0
    

    完!!!

     

     

     

    展开全文
  • 满意答案只要打开蓝牙就可以BluetoothAdapter mBtAdapter=BluetoothAdapter.getDefaultAdapter();mBtAdapter.startDiscovery();private final BroadcastReceiver mReceiver = new BroadcastReceiver() {@...

    满意答案

    只要打开蓝牙就可以

    BluetoothAdapter mBtAdapter=BluetoothAdapter.getDefaultAdapter();

    mBtAdapter.startDiscovery();

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

    @Override

    public void onReceive(Context context, Intent intent) {

    String action = intent.getAction();

    // When discovery finds a device

    if (BluetoothDevice.ACTION_FOUND.equals(action)) {

    // Get the BluetoothDevice object from the Intent

    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

    device.getName()就是搜到蓝牙的名字

    }

    }

    };

    00分享举报

    展开全文
  • 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 蓝牙搜索不到Ble设备

    万次阅读 2015-11-24 16:28:49
    今天写好了项目准备交给测试人员去测试,但是问题来了,我平时运行的都是自己的手机,sdk版本是5.0(21)的,但是测试组给我的手机是安卓4.4的,结果搜都搜不到Ble设备,苦逼了好久,我拿了一个demo对比,发现demo...
  • 最近开发一款软件,一开始一切顺利,但是在连接外围BLE 设备时,发现需要Location的权限,  uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION。  在AndroidManifest里面加上了权限,同时...
  • 手机搜索不到BLE蓝牙设备怎么办

    千次阅读 2019-05-21 09:58:25
    可以通过调整晶振匹配电容,来调整频偏的大小来尝试解决问题。
  • 我用 TI CC2540 的 键盘 DEMO ,但是在 PAD MINI 里面 的蓝牙搜索,搜索不到这个 键盘呢~! 请教各位大神,这是什么原因呢?
  • 我在用ble开发的时候出现一个问题,魅族小米两手机的搜不到任何蓝牙设备(三星一款能搜到) ,安卓6.0以上的已经动态申请了位置权限也没用 ,此时只要一把位置信息开关打开马上就能搜到设备. 而我们的app一直在后台运行....
  • 传统蓝牙搜索流程分析本期承接上篇分享《传统蓝牙BR/EDR的搜索Inquiry》来聊聊安卓系统中传统蓝牙搜索是如何实现的。安卓系统中应用Application通过蓝牙适配器接口 BluetoothAdapter.startDiscovery() 的调用触发...
  • 1、蓝牙网关 ...比如抓取 BLE 蓝牙设备的数据,再通过 WiFi 的方式转发后台指定的服务器。 蓝牙网关主要用于扫描蓝牙设备、iBeacon 设备,然后实现远程云管理。 例如: 远程控制 BLE 蓝牙设备,接收 ...
  • 在Android 6.0,原来的蓝牙功能,发现扫描蓝牙设备时,无法获取到蓝牙设备;因为在6.0后,蓝牙这块增加一个动态权限;需要在程序中动态申请。1.在AndroidManifest里面加上了权限1) 在6.0版本前,使用蓝牙功能,只...
  • 我最近做了一个蓝牙扫描Demo需要将经典蓝牙BLE低功耗蓝牙进行分开扫描并且显示,发现了一些问题在次总结一下,首先是Android 6.0以后扫描蓝牙需要与定位权限,否则扫描不到。自己写的Demo是前30秒扫描经典蓝牙,后...
  • android 蓝牙BLE扫描和wifi扫描总结

    千次阅读 2016-07-08 16:50:10
    做室内定位的程序员应该都知道,在android 5.0之后,google推出了蓝牙扫描新接口,我们在实测中发现出一些问题,现在给大家列出,以供参考: 1.android 4.3.1(Build.VERSION_CODES.JELLY_BEAN_MR2)增加的startLeScan...
  • BLEDevice作为蓝牙BLE的中心控制者,集成了多种功能。包括Scan、Advertising、Gatt等等。 正常情况下我们都是使用这个类去调用各个功能。
  • 一、BLE4.0低功耗蓝牙 Bluetooth Low Energy,蓝牙低功耗,是从蓝牙4.0开始支持的技术。相较传统蓝牙,传输速度更快、覆盖范围广、安全性高、延时短、耗电低等特点。 二、关键术语 1.GATT(通用属性配置):通用...
  • 低功耗蓝牙(BLE)基本概念讲解三、Android BLE API 简介1.Android 蓝牙开发示例第一步:声明所需要的权限第二步:连接蓝牙前的初始化工作第三步:扫描蓝牙设备第四步:连接蓝牙设备第五步:发现服务最后一步:断开...
  • 最近遇到一个问题,通过android手机搜索附近的蓝牙BLE设备, 出现了蓝牙名称相同,但是MAC地址不同的设备 例如一台设备名称叫TEST,搜索的时候,出了两台名叫TEST的设备,但是两台设备的MAC地址不同, 实际上只有...
  • android 6.0系统扫不到Ble蓝牙问题

    千次阅读 2016-07-22 12:09:40
    android 6.0系统新增动态授权机制,且要扫描到蓝牙需要额外添加一个权限: ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION权限 android4.3及以上5.0以下支持设定uuid搜索;而5.0以上是支持的; android...
  • 项目中需要用到android Ble蓝牙4.0开发技术,于是开启了蓝牙填坑之旅,说实话,蓝牙开发坑真多,跳出一个又进入下一个,每次遇到 问题,就觉得可能解决了,还好在自己的摸索中,都一一的化解了,以此来记录安卓...
  • android BLE扫描设备添加过滤是正常的,可以扫设备(定位权限已开启) 一旦添加过滤后无法扫描得到设备。我是通过服务UUID进行过滤的。 我试过BluetoothLeScanner的startScan方法,也用过BluetoothAdapter的...
  • Android蓝牙ble扫描

    千次阅读 2017-07-30 00:28:02
    酒已经准备好了,各位看客,请准备好小板凳。 理论性的东西就写太多了,推荐一个挺好的博文 ...  官方文档的翻译(简书): ...复制一些重要的理论过来,也方便你们查看: ...蓝牙有传统蓝牙(3.0以下)和低
  • 前言 ...这些工具可以用来在linux环境下与ble设备进行调试,但是本人需要的是可用的c语言api,如果你只是开发经典蓝牙,那么恭喜你,交叉编译完后的的api足够用了;但是低功耗蓝牙用的C接口是没有...
  • React Native BLE蓝牙通信

    万次阅读 多人点赞 2017-05-07 23:34:15
    由于项目需要,基于...react-native-ble-manager:文档清晰明了,简单易懂,基本每个月都有更新,遇到问题提交issue作者也能及时回复,确保能兼容所有BLE蓝牙设备。 react-native-ble-plx:文档阅读起来有点难...
  • BLE蓝牙

    2016-11-15 13:11:12
    这么说不对,但是我觉得这么理解比较好理解,蓝牙分为重量级和轻量级,轻量级的连接是在蓝牙4.0以上才有的,也就是 BLE技术 , 而Android是在API 18 也就是4.3以上才支持蓝牙4.0技术。BLE更省电,连接速度更快,使用...
  • 需要做一个类似于美团单车小程序扫码开锁的程序,需要使用微信小程序的蓝牙模块功能与蓝牙锁进行交互 一、这里我先把我遇到的两个天坑在这里先说明一下: 1、根据锁的开发文档描述:读特征值是000036F6-0000-1000...
  • Ble蓝牙

    2018-09-09 16:42:18
    低功耗蓝牙ble) 2.API版本 传统蓝牙: 4.3(API&lt;18)以下 低功耗蓝牙:4.3(API&gt;=18)以上 3.低功耗蓝牙较传统蓝牙的的特点: 数据传输速度相比传统蓝牙低 覆盖范围更广 延迟更短 耗电...
  • 今天忽然换了个知道从哪儿找来的设备,居然扫描不出Notify。但是用nRFConnect工具依然可以收到数据,而且还是通过Notify的方式。这就很懵了,现在这个设备用我自己的代码是能发数据,但是能接收数据。可否给个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,624
精华内容 2,249
关键字:

ble扫描不到蓝牙