谁做server(中心),谁做client(周边),则取决于具体数据传输的情况。
1、如果活动追踪的BLE设备需要向 Android设备传输数据,则BLE设备自然成为了中心端(server);
2、如果活动追踪的BLE设备需要从Android设备获取更新信息,则 Android设备作为中心端可能更合适。


由于搜索需要尽量减少功耗,因此在实际使用时需要注意:
1、当找到对应的设备后,立即停止扫描;
2、不要循环搜索设备,为每次搜索设置适合的时间限制。避免设备不在可用范围的时候持续不停扫描, 消耗电量。


普通蓝牙和BLE设备是完全独立的,不能同时搜索得到


连接设备后会得到多个服务(Service),每个服务下会对应多个特征值(Characteristic)


中央设备扫描寻求广播,外围设备发出广播


周边设备同一时刻只能被一个中心设备连,而中心设备可以同时连多个周边设备
5.0以上的手机能够当主办方也能够当参与者
5.0以下手机只能够当参与者
发布服务在API 21以上才能 (5.0以上)
查找设备4.3以上都可以。mAdapter.getBluetoothLeScanner().startScan()
mAdapter.startLeScan(mLeScanCallback);


5.0以上手机可以是主办方也可以是参与者 (可以发布服务也可以扫描设备)
5.0以下手机只能是参与者(只能扫描设备)
综上可见:主办方是发布服务,并且查找设备
参与者是查找设备,并且连接


  • 开启蓝牙
BluetoothManager manager = (BluetoothManager) getActivity().getSystemService(Context.BLUETOOTH_SERVICE);        BluetoothAdapter mAdapter = manager.getAdapter();        if (mAdapter == null || !mAdapter.isEnabled()) {            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);            startActivityForResult(enableBtIntent, 1);            return;        }
  • 发布特定UUID的服务
   private void publish(String UUID) {        //发布UUID        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            BluetoothManager manager = (BluetoothManager) getActivity().getSystemService(Context.BLUETOOTH_SERVICE);            BluetoothAdapter mAdapter = manager.getAdapter();            BluetoothGattCharacteristic character = new BluetoothGattCharacteristic(                    java.util.UUID.fromString(UUID),                    BluetoothGattCharacteristic.PROPERTY_NOTIFY,                    BluetoothGattCharacteristic.PERMISSION_READ);            BluetoothGattService service = new BluetoothGattService(                    java.util.UUID.fromString(UUID),                    BluetoothGattService.SERVICE_TYPE_PRIMARY);            service.addCharacteristic(character);            BluetoothGattServer server = manager.openGattServer(getActivity(), new        BluetoothGattServerCallback() {                @Override                public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {                    super.onConnectionStateChange(device, status, newState);                }            });            BluetoothLeAdvertiser advertiser = mAdapter.getBluetoothLeAdvertiser();            server.addService(service);            AdvertiseData data = new AdvertiseData.Builder()                    .addServiceUuid(ParcelUuid.fromString(UUID)).build();            AdvertiseSettings settings = new AdvertiseSettings.Builder().setConnectable(true).build();            advertiser.startAdvertising(settings, data, new AdvertiseCallback() {                @Override                public void onStartSuccess(AdvertiseSettings settingsInEffect) {                    super.onStartSuccess(settingsInEffect);                    Log.i("ysc","服务发布成功");                }            });        }    }
  • 搜索特定UUID的服务
 //搜索 活动    private void search(String uuid) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            BluetoothManager manager = (BluetoothManager) getActivity().getSystemService(Context.BLUETOOTH_SERVICE);            final BluetoothAdapter mAdapter = manager.getAdapter();            List bleScanFilters = new ArrayList<>();            bleScanFilters.add(                    new ScanFilter.Builder().setServiceUuid(ParcelUuid.fromString(uuid)).build());            ScanSettings bleScanSettings = new ScanSettings.Builder().build();            mAdapter.getBluetoothLeScanner().startScan(bleScanFilters,bleScanSettings,new ScanCallback() {                @Override                public void onBatchScanResults(List results) {                    super.onBatchScanResults(results);                }                @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)                @Override                public void onScanResult(int callbackType, ScanResult re) {                    super.onScanResult(callbackType, re);                }                @Override                public void onScanFailed(int errorCode) {                    super.onScanFailed(errorCode);                }            });        }    }

更多相关文章

  1. Android(安卓)C2DM学习——客户端代码开发
  2. Google 终于要让 20 亿 Android(安卓)设备能玩上高性能的 AR 了
  3. 使用Android辅助服务AccessibilityService实现的微信自动抢红包
  4. 高仿android 版微信(服务端,客户端都有)
  5. Android设备使用USB的硬件接口
  6. 移动广告商的最爱——iPad
  7. 移动大变局下的抉择—移动开发者大会刊首语
  8. 调查显示Android和iOS设备正慢慢侵蚀PC市场
  9. Android的音视频处理

随机推荐

  1. android例子
  2. android ADB PUSH 安装apk的具体步骤 及
  3. android kernel Debugging hibernation a
  4. android读取SDCard任意路径下的文件
  5. android 判断时间是否已过期
  6. Android(安卓)系统 设置 之 网络 APN (一)
  7. Android(安卓)之 发送邮件
  8. 使用android快速开发框架afinal 开发andr
  9. Android判断应用是否存在
  10. Android中多层Fragment嵌套,调用相册返回U