Android 手机可以通过 BLE 被扫描到吗

 我来答
百度网友db177e1f663
2016-04-12 · TA获得超过1088个赞
知道小有建树答主
回答量:471
采纳率:0%
帮助的人:137万
展开全部
本文介绍Android ble 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用,如果手机系统版本API
level < 18,也是用不了蓝牙4.0的哦。

  首先发一下官方的demo,有兴趣的可以过去看看:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html。android系统4.3以上,手机支持蓝牙4.0,具有搜索,配对,连接,发现服务及特征值,断开连接等功能,下载地址:http://download.csdn.net/detail/lqw770737185/8116019

  一、了解api及概念

  1.1 BluetoothGatt

  继承BluetoothProfile,通过BluetoothGatt可以连接设备(connect),发现服务(discoverServices),并把相应地属性返回到BluetoothGattCallback

  1.2 BluetoothGattCharacteristic

  相当于一个数据类型,它包括一个value和0~n个value的描述(BluetoothGattDescriptor)

  1.3 BluetoothGattDescriptor

  描述符,对Characteristic的描述,包括范围、计量单位等

  1.4 BluetoothGattService

  服务,Characteristic的集合。

  1.5 BluetoothProfile

  一个通用的规范,按照这个规范来收发数据。

  1.6 BluetoothManager

  通过BluetoothManager来获取BluetoothAdapter

  BluetoothManager bluetoothManager = (BluetoothManager)
getSystemService(Context.BLUETOOTH_SERVICE);

  1.7 BluetoothAdapter

  一个Android系统只有一个BluetoothAdapter ,通过BluetoothManager 获取

  BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();

  1.8 BluetoothGattCallback

  已经连接上设备,对设备的某些操作后返回的结果。这里必须提醒下,已经连接上设备后的才可以返回,没有返回的认真看看有没有连接上设备。

  private BluetoothGattCallback GattCallback = new BluetoothGattCallback()
{

  // 这里有9个要实现的方法,看情况要实现那些,用到那些就实现那些

  public void onConnectionStateChange(BluetoothGatt gatt, int status, int
newState){};

  public void onCharacteristicWrite(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic, int status){};

  };

  BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);

  BluetoothGatt gatt = device.connectGatt(this, false, mGattCallback);

  1.8.1:notification对应onCharacteristicChanged;

  gatt.setCharacteristicNotification(characteristic, true);

  1.8.2:readCharacteristic对应onCharacteristicRead;

  gatt.readCharacteristic(characteristic);

  1.8.3: writeCharacteristic对应onCharacteristicWrite;

  gatt.wirteCharacteristic(mCurrentcharacteristic);

  1.8.4:连接蓝牙或者断开蓝牙 对应 onConnectionStateChange;

  1.8.5: readDescriptor对应onDescriptorRead;

  1.8.6:writeDescriptor对应onDescriptorWrite;

  gatt.writeDescriptor(descriptor);

  1.8.7:readRemoteRssi对应onReadRemoteRssi;

  gatt.readRemoteRssi()

  1.8.8:executeReliableWrite对应onReliableWriteCompleted;

  1.8.9:discoverServices对应onServicesDiscovered。

  gatt.discoverServices()

  1.9 BluetoothDevice

  扫描后发现可连接的设备,获取已经连接的设备

  二、开启蓝牙权限
 如果
android.hardware.bluetooth_le设置为false,可以安装在不支持的设备上使用,判断是否支持蓝牙4.0用以下代码就可以了

  if
(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE))
{

  Toast.makeText(this, "设备不支持蓝牙4.0", Toast.LENGTH_SHORT).show();

  finish();

  }

  三、对蓝牙的启动关闭操作

  1、利用系统默认开启蓝牙对话框

  if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {

  Intent enableBtIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

  startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

  }

  2、后台打开蓝牙,不做任何提示,这个也可以用来自定义打开蓝牙对话框啦

  mBluetoothAdapter.enable();

  3、后台关闭蓝牙

  mBluetoothAdapter.disable();

  四、扫描设备,连接设备,获取设备信息 ,断开连接设备,自行查看官方demo,还是看demo比较清晰啊
huanglenzhi
2016-04-10 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517195
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  5.0以后可以了。之前不可以的。只能当主机。Android在4.2的时候可以使用一些第三方的SDK尝试着使用Ble当主机。Android在4.3以后官方可以当主机的角色,也就是central,不能作为peripheral。刚刚发布的5.0已经完美解决了这个问题。主从机都可以了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式