Giter VIP home page Giter VIP logo

fastble's People

Contributors

jasonchenlijian avatar liaolintao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fastble's Issues

程序建议

1、ListScanCallback 这个回调是在超时后才返回,如果设置超时10s或更大则回调太晚给用户体验不好
建议直接返回blueDevice
2、onLeScan device.getName()这个蓝牙名称不一定真实,需要对scanRecord进行分析得到localname才是真实的
3、增加对ble是否支持判断
4、增加对蓝牙状态监听处理
5、增加writeWithoutResponse
6、建议不用handler 进行主线程切换,建议使用org.greenrobot:eventbus:3.0.0

以上只是个人开发建议,有不当地方,还望详解。

每秒接收100个数据的时候会出现问题?

您好,最近看了这个项目很有帮助,但是在我使用蓝牙硬件每秒发送100个数据的时候,手机端开始接收的时候是正常的,每10ms可以接收到1个数据,但是5秒左右之后,数据接收就会变得异常,具体表现为:先是卡在某个数据不动,1s左右之后瞬间跳变几个数据,再卡在这个数据,如此往复,不像开始的时候数据接收的那么流畅,请问是线程堵塞的原因吗?程序本身应该是有数据接收就会触发回调函数来处理数据的吧?希望得到解答,谢谢!

只能搜索到BLE设备吗?

RT,我尝试搜索手机的蓝牙,但是并没有搜索到手机的蓝牙,只显示了BLE设备的。是不是普通蓝牙设备,跟BLE设备是不一样,需要特别处理?

提几点意见

最近也在学习蓝牙的知识,但是看了这个觉得还是很一般。
1、接口、抽象类太多,过多的抽象反而重了,而且抽象的也不是很好。比如扫描到的设备为什么要扫描结束后才返回结果而不是扫一个出现一个?另外,为什么不是用Set来去重而要用List做下判断去重?
2、封装也不是很好,比如连接服务就没必要公布出来让使用者去做。
@Override public void onConnectSuccess(BluetoothGatt gatt, int status) { gatt.discoverServices(); }
2、没有考虑6.0权限这一块儿,存在权限安全问题。
其他的还没仔细看

回调处理的问题

我的设备write 和 notify的uuid是一样的,hashmap的键值一样只能添加一个回调,导致收不到数据返回的通知(notify的回调被write覆盖了)

为什么indicateDevice有时候成功,有时候失败?

已经有输出设置成功,D/BleConnector: setCharacteristicIndication----true----success: true
但是最终方法返回的是false,而监听也没有成功。
使用的是同一个特征值来设置监听,为什么会这样呢?
遇到这样子的情况,需要怎么处理?

连接成功以后马上就会主动的断开

已经显示21 15:54:12.818 25288-25300/com.sita.fastbleactivity E/1000000111000: 蓝牙获取服务成功
03-21 15:54:12.818 25288-25300/com.sita.fastbleactivity D/BluetoothDevice: mAddress: A8:1B:6A:85:A8:66
03-21 15:54:12.818 25288-25300/com.sita.fastbleactivity D/BluetoothDevice: mAddress: A8:1B:6A:85:A8:66
03-21 15:54:12.819 25288-25300/com.sita.fastbleactivity D/BluetoothDevice: mAddress: A8:1B:6A:85:A8:66
03-21 15:54:12.819 25288-25300/com.sita.fastbleactivity E/1000000111000: 蓝牙特征值获取成功
03-21 15:54:12.819 25288-25300/com.sita.fastbleactivity D/BluetoothGatt: setCharacteristicNotification() - uuid: 0000ffe1-0000-1000-8000-00805f9b34fb enable: true
03-21 15:54:12.819 25288-25300/com.sita.fastbleactivity D/BluetoothDevice: mAddress: A8:1B:6A:85:A8:66
03-21 15:54:12.822 25288-25288/com.sita.fastbleactivity D/BluetoothDevice: mAddress: A8:1B:6A:85:A8:66
03-21 15:54:12.823 25288-25288/com.sita.fastbleactivity D/BleConnector: 0000ffe1-0000-1000-8000-00805f9b34fb
characteristic.getProperties():24
characteristic.getValue(): null
characteristic write bytes: [24, 24, 13, 13, 1, 0, 0, 0, 0, 0, 0, 13, 10]
hex: 18180d0d010000000000000d0a
E/FaseBlueLog: 连接失败或连接中断:201
03-21 15:54:12.998 25288-25301/com.sita.fastbleactivity E/BleExceptionHandler: Gatt Exception Occurred!

连接速度比较慢的解决办法

将BleManager.java中的

    private void connect(BluetoothDevice device, BleGattCallback callback) {
        bleBluetooth.connect(device, true, callback);
    }

这里的第二个参数是智能连接,如果开启了智能连接,会影响连接速度,我测试过,开启智能连接速度会是不开启的十倍,项目中可以修改默认为false,或者直接丢到外部给人使用,体验效果会好点

当设备Android系统处于4.3以下的时候,会直接强退

在BleBluetooth.java中,使用了这个全局回调变量coreGattCallback,一旦设备不支持BLE4.0,这里就会出问题,导致实例化的时候,程序崩溃,所以,目前我的是直接在用的那里new一个,不知道还有什么解决方案
private BleGattCallback coreGattCallback = new BleGattCallback() {

    @Override
    public void onNotFoundDevice() {
        BleLog.i("coreGattCallback:onNotFoundDevice ");

        bluetoothGatt = null;
        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BleGattCallback) {
                ((BleGattCallback) call).onNotFoundDevice();
            }
        }
    }

    @Override
    public void onConnectSuccess(BluetoothGatt gatt, int status) {
        BleLog.i("coreGattCallback:onConnectSuccess ");

        bluetoothGatt = gatt;
        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BleGattCallback) {
                ((BleGattCallback) call).onConnectSuccess(gatt, status);
            }
        }
        bluetoothGatt.discoverServices();
    }

    @Override
    public void onConnectFailure(BleException exception) {
        BleLog.i("coreGattCallback:onConnectFailure ");

        bluetoothGatt = null;
        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BleGattCallback) {
                ((BleGattCallback) call).onConnectFailure(exception);
            }
        }
    }

    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        BleLog.i("coreGattCallback:onConnectionStateChange "
                + '\n' + "status: " + status
                + '\n' + "newState: " + newState
                + '\n' + "thread: " + Thread.currentThread().getId());

        if (newState == BluetoothGatt.STATE_CONNECTED) {
            connectionState = STATE_CONNECTED;
            onConnectSuccess(gatt, status);

        } else if (newState == BluetoothGatt.STATE_DISCONNECTED) {
            connectionState = STATE_DISCONNECTED;
            onConnectFailure(new ConnectException(gatt, status));

        } else if (newState == BluetoothGatt.STATE_CONNECTING) {
            connectionState = STATE_CONNECTING;
        }

        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BluetoothGattCallback) {
                ((BluetoothGattCallback) call).onConnectionStateChange(gatt, status, newState);
            }
        }
    }

    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {
        BleLog.i("coreGattCallback:onServicesDiscovered ");

        connectionState = STATE_SERVICES_DISCOVERED;
        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BluetoothGattCallback) {
                ((BluetoothGattCallback) call).onServicesDiscovered(gatt, status);
            }
        }
    }

    @Override
    public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        BleLog.i("coreGattCallback:onCharacteristicRead ");

        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BluetoothGattCallback) {
                ((BluetoothGattCallback) call).onCharacteristicRead(gatt, characteristic, status);
            }
        }
    }

    @Override
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        BleLog.i("coreGattCallback:onCharacteristicWrite ");

        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BluetoothGattCallback) {
                ((BluetoothGattCallback) call).onCharacteristicWrite(gatt, characteristic, status);
            }
        }
    }

    @Override
    public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
        BleLog.i("coreGattCallback:onCharacteristicChanged ");

        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BluetoothGattCallback) {
                ((BluetoothGattCallback) call).onCharacteristicChanged(gatt, characteristic);
            }
        }
    }

    @Override
    public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
        BleLog.i("coreGattCallback:onDescriptorRead ");

        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BluetoothGattCallback) {
                ((BluetoothGattCallback) call).onDescriptorRead(gatt, descriptor, status);
            }
        }
    }

    @Override
    public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
        BleLog.i("coreGattCallback:onDescriptorWrite ");

        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BluetoothGattCallback) {
                ((BluetoothGattCallback) call).onDescriptorWrite(gatt, descriptor, status);
            }
        }
    }

    @Override
    public void onReliableWriteCompleted(BluetoothGatt gatt, int status) {
        BleLog.i("coreGattCallback:onReliableWriteCompleted ");

        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BluetoothGattCallback) {
                ((BluetoothGattCallback) call).onReliableWriteCompleted(gatt, status);
            }
        }
    }

    @Override
    public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
    	
        BleLog.i("coreGattCallback:onReadRemoteRssi ");
        Iterator iterator = callbackHashMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            Object call = entry.getValue();
            if (call instanceof BluetoothGattCallback) {
                ((BluetoothGattCallback) call).onReadRemoteRssi(gatt, rssi, status);
            }
        }
    }
};

Auto Connection

Is There any Option for auto connection with ble device once lost connection

你好,startNotify方法执行了,characteristic和service的uuid也写入了,但是通知无返回值是什么情况

04-01 10:00:47.703 26119-26119/com.bdk.blesample I/OperateActivity: startNotify
04-01 10:00:47.704 26119-26119/com.bdk.blesample W/BleConnector: characteristic.getProperties():58
04-01 10:00:47.704 26119-26119/com.bdk.blesample D/BluetoothGatt: setCharacteristicNotification() - uuid: bef8d6c9-9c21-4c9e-b632-bd58c1009f9f enable: true
04-01 10:00:47.706 26119-26119/com.bdk.blesample D/BleConnector: setCharacteristicNotification: true
success: true
characteristic.getUuid(): bef8d6c9-9c21-4c9e-b632-bd58c1009f9f

支持蓝牙串口通讯的设备相关问题

service UUID = 0000ffe0-0000-1000-8000-00805f9b34fb
characteristic UUID = 0000ffe1-0000-1000-8000-00805f9b34fb
这个UUID 是支持蓝牙串口通讯的 所以既需要notify 也需要write
作者是每个characteristic 有且只有一个callback 。。
目前我是在write的callback的success中重新开启notify 但感觉会有实时性的问题。

set同步问题

你好,最近看了你的BLE代码,思路上有所收获,但对于多线程操作Set时需要相应的调整,否则可能报错java.util.ConcurrentModificationException。

怎么扫描某一特定的设备

请问一下: 在怎么通过 service uuid 扫描出特定的设备呢?或者说有没有其他方式扫描出某一特定ble设备.

Sending more than 20 bytes for characteristic

Is it possible to write more than 20 bytes for a characteristic with the library? Using the writeDevice method it seems like it is not. What would be the best way of achieving this?

设备返回值

你好,请问写入数据后如何接收设备的返回值呢?

线程会不会阻塞

如果在回调函数onLeScan中添加耗时操作,请问会不会造成阻塞?

1.0.3开启蓝牙问题

无法得到蓝牙使能的结果。
上一版本是可以在onActivityResult 中获取到的。

不满足多蓝牙连接需求~

我所在公司做的app需要连接两个蓝牙,以后可能连接更多,看了一下您的开源项目,不支持多个蓝牙同时连接,所以建议您让这个项目支持多蓝牙同时连接功能。

内存泄漏

扫描完附近的设备后返回到上一页,会发生内存泄漏

连续read的话,有一些read不了,没有进入回调onCharacteristicRead

你好,看了demo是点击的时候再读的,如果我换了直接在发现服务成功后遍历读特征的话,后面的都读不出来的,没有进入onCharacteristicRead这个回调。就是如果每次只读一个的话就都可以成功,但是如果遍历读的话就只能读成功第一个,后面的都没有进入回调。想问下这个你是怎么解决的呢,感谢。

在Android4.4系统上连接蓝牙后,无法获取Service

在我的项目中,使用Android4.4.4的三星手机,连上蓝牙后,无法进入回调onServicesDiscovered,导致无法与蓝牙设备进行数据通信,发现在onConnectSuccess回调里面,没有调用bluetoothGatt.discoverServices(),增加之后,测试正常

建议:关闭连接时先移除callback

在关闭当前连接的时候, 先移除callback, 再断开连接;因为断开连接会触发连接失败的回调.

/**

  • 关闭连接
    */
    public void closeBluetoothGatt() {
    if (bleBluetooth != null) {
    bleBluetooth.clearCallback();
    bleBluetooth.closeBluetoothGatt();
    }
    }

单例模式,引用了activity的上下文, 会引起activity内存泄露

` /**

  • 初始化
    */
    public void init(Context context) {

// mContext = context;
mContext = context.getApplicationContext();

if (bleBluetooth == null) {
  bleBluetooth = new BleBluetooth(context);
}
bleBluetooth.enableBluetoothIfDisabled((Activity) context, 1);
bleExceptionHandler = new DefaultBleExceptionHandler(context);

}`

无法停止扫描

扫描蓝牙的时候,如果没有超出设定发时间再次调用bleManager.scanDevice()的时候,它会有两个扫描器同时在扫描。

您好,請教一個問題

請問一下,這個api可以連接microcontroller嗎?
手機設備的uuid和microcontroller好像不一樣
"fa87c0d0-afac-11de-8a39-0800200c9a66" 手機
"00001101-0000-1000-8000-00805F9B34FB" microcontroller
使用上會有差嗎?

Android6.0掃描不到裝置

已經在Manifest添加以下權限

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

仍然掃描不到裝置,請問能成功運行在6.0以上的解法?

点击连接时,报空指针异常,请问应该怎么修正?

com.bdk.blesample E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
com.bdk.blesample E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at java.lang.String.valueOf(String.java:1574)
at com.clj.blesample.OperateActivity.showConnectState(OperateActivity.java:263)
at com.clj.blesample.OperateActivity.access$300(OperateActivity.java:34)
at com.clj.blesample.OperateActivity$3$1.run(OperateActivity.java:169)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5136)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

你好,有个问题请教一下

我在write的时候,会发送失败,返回值为code = 301 , description为this characteristic not support write,请问这个返回值的意思是?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.