保存BluetoothDevice的所有服务和特征的缓存。可能?

时间:2015-12-20 07:20:40

标签: android bluetooth-lowenergy android-bluetooth

我有一个BluetoothDevice与它相关的BluetoothGatt对象。这是用户每天连接的设备,它没有任何经常更改的特性或服务。

现在为了与设备进行交互,每次连接后我都要先发现所有服务,这通常会给整个过程增加1-5秒的延迟。

我的问题是:是否可以保存设备服务和特性的缓存,这样我就不必在每次连接后实际调用discoverServices

1 个答案:

答案 0 :(得分:1)

我不了解iOS手机,但Android手机总是会缓解已发现的特征和服务,因此与首次连接相比,服务发现所需的时间更短。请参阅此thread

您的问题应该是是否可以消除服务发现或根本不消除服务发现。根据蓝牙规范,您不需要在每次连接后执行服务发现。如果您知道特征及其服务的 UUID ,则可以根据特征属性直接执行(无服务发现) GATT 操作。

Android需要服务发现才能实例化 source 'https://rubygems.org' # Solidus E-Commerce gem 'solidus' gem 'solidus_auth_devise' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '4.2.4' # Use sqlite3 as the database for Active Record gem 'sqlite3' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.1.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby # Use jquery as the JavaScript library gem 'jquery-rails' # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks gem 'turbolinks' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.0' # bundle exec rake doc:rails generates the API under doc/api. gem 'sdoc', '~> 0.4.0', group: :doc # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Unicorn as the app server # gem 'unicorn' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' end group :development do # Access an IRB console on exception pages or by using <%= console %> in views gem 'web-console', '~> 2.0' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' end BluetoothGattService个对象。但是,您可以通过查看Android的源代码并使用Java反射来实例化您自己的BluetoothGattCharacteristicBluetoothGattService对象。您可以先使用BLE API中提供的构造函数创建这些对象。然后将特性连接到BluetoothGatt对象的服务和服务,您将需要使用Java反射方法。为此,您应该阅读类的源代码(只需按住控件并单击 Android Studio 中的类来查看源代码)。我自己实现了这一点,很快我将用我的博客文章更新这个帖子,但这里有一个偷看:

BluetoothGattCharacteristic

你应该使用Java反射方法;首先将特征与服务联系起来;其次是对BluetoothGatt实例的服务,一旦BLE Gatt连接建立就会实例化。