Ble是广告,在BluetoothGattServer中添加广告数据,广告完成,设备连接。在连接之后,也调用discoverServices(),但是没有发现服务,即没有触发onserviceinstovered()回调。
private void startAdvertising() {
Log.d(TAG, "Service: Starting Advertising");
if (mAdvertiseCallback == null) {
AdvertiseSettings settings = buildAdvertiseSettings();
AdvertiseData data = buildAdvertiseData();
mAdvertiseCallback = new SampleAdvertiseCallback();
if (mBluetoothLeAdvertiser != null) {
mBluetoothLeAdvertiser.startAdvertising(settings, data, mAdvertiseCallback);
}
}
}
private void initServer() {
BluetoothGattService service =
new BluetoothGattService(Constants.Service_UUID,BluetoothGattService.SERVICE_TYPE_PRIMARY);
BluetoothGattCharacteristic characteristic =
new BluetoothGattCharacteristic(Constants.Char_UUID,
//Read + write characteristics and permission
BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_WRITE,
BluetoothGattCharacteristic.PERMISSION_READ | BluetoothGattCharacteristic.PERMISSION_WRITE);
service.addCharacteristic(characteristic);
mBluetoothGattServer.addService(service);
}
//回调以处理所有Gatt客户端连接以处理读写请求
private BluetoothGattServerCallback mBGattServerCallback = new BluetoothGattServerCallback() {
@Override
public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
super.onConnectionStateChange(device, status, newState);
Log.d(TAG ,"OnConnection state change");
if(newState == BluetoothProfile.STATE_CONNECTED){
}else if(newState == BluetoothProfile.STATE_DISCONNECTED){
}
}
@Override
public void onServiceAdded(int status, BluetoothGattService service) {
super.onServiceAdded(status, service);
Log.i(TAG, " Service are added");
}
//广告数据
private AdvertiseData buildAdvertiseData() {
advertedata data=new advertedata.builder().setIncludedEviceName(true).addServiceUUID(new ParcelUuid(constants.service_uuid)).build();}
private AdvertiseSettings buildAdvertiseSettings() {
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED)
.setConnectable(true)
.setTimeout(0)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
.build();
return settings;
private void initialize() {
if (mBluetoothLeAdvertiser == null) {
BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
if (mBluetoothManager != null) {
BluetoothAdapter mBluetoothAdapter = mBluetoothManager.getAdapter();
if (mBluetoothAdapter != null) {
mBluetoothLeAdvertiser = mBluetoothAdapter.getBluetoothLeAdvertiser();
//register the instance of server to BLE framework
mBluetoothGattServer = mBluetoothManager.openGattServer(this,mBGattServerCallback);
initServer();
} else {
Toast.makeText(this, getString(R.string.bt_null), Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(this, getString(R.string.bt_null), Toast.LENGTH_LONG).show();
}
}
}
//日志总结
`//服务uuid和特性uuid将进入广告数据{onGetService()-device=65:5E:34:E1:47:55 uuid=0000xxxx-0000-1000-8000-00805xxx10-31 17:55:11.542 232 76-25749/d/bluetoothgatt:onGetService()-device=65:5E:34:E1:47:55 uuid=0000xxxx-0000-1000-8000-0080xxxx
ongetexpretice()-device=65:5e:34:e1:47:55 uuid=0000xxxx-0000-1000-8000-00805fxxxx srvctype=0 srvcinstid=0 charinstid=0 charprops=32 10-31 17:55:11.627 232 76-23290/d/bluetoothgatt:ongetexpretice()-device=65:5e:34:e1:47:55 uuid=0000xxx-0000-1000-8000-00805fxxxx srvctype=0 srvcinstid=0 charinstid=1 718 232 76-23289/D/Bluetoothgatt:ongetexpretice()-device=65:5e:34:e1:47:55 uuid=0000xxxx-0000-1000-8000-00805fxxxxx srvctype=0 srvcinstid=0 charinstid=0 charpps=2}`
我正在用micromax canvas作为中心测试设备变化。现在我换了设备,这里的服务被发现了,并得到了回调…
但是writeCharacteristics()请求时,服务器(远程设备)没有触发回调onCharacteristicsReadRequest(),因为我只对所需的特性执行写操作。没有别的东西可以拒绝手术。
在异步HTTP SERVER中使用服务 全局方法service_center() 使用service_center($service)获取服务地址,然后使用call()方法调用公开的服务方法 $service = (yield service_center('User')); $user = (yield $service->call("User::getUser", ['id'
问题内容: 我正在使用FCM服务器进行远程通知,它可以完美地与发送和接收通知配合使用。 我的问题是,当设备在后台运行时,不会调用此函数。 我尝试过的解决方案: 该功能: 当用户点击通知时调用。否则,它不会被触发。 添加到有效载荷。另外,我尝试了这个值。 这是我的功能代码: func application(_ application: UIApplication, didReceiveRemote
我不熟悉单元测试。参考google之后,我创建了一个测试类来测试我的控制器,如下所示: 我有以下控制器和服务类: 当我调试单元测试时,控制器中的p对象为null。我的状态是200,但不是预期的JSON响应 我错过了什么?
服务调用监控 KernalEvent::SERVICE_CALL事件 在框架层,调用servcie时,会抛出KernalEvent::SERVICE_CALL事件,你可以监听该事件,做数据上报处理,请以异步方式上报 <?php namespace src\Web\Listeners; use Listener; use Event; class Servic
我的域名上运行了一个angular2应用程序,现在被Rails应用程序取代。 但是,我一直在 有没有办法从我的用户浏览器中删除旧的服务人员?
问题内容: 我已经编写了带有远程接口的服务,并将其安装在PC的Eclipse AVD上。我有一个客户端测试工具,可以启动和调用服务中的方法。最初,我是通过控件类和活动安装的服务,现在已将其删除,因此该服务的清单如下所示: 因此没有活动标签。 当我从Eclipse中的调试图标启动它时,控制台会告诉我它正在安装apk(它确实是),但是它并没有作为调试线程出现,也没有触发断点,尽管该服务的行为到目前为止