这听起来很基本,但我是Android BLE开发的初学者。到目前为止,我能够创建我的Nexus9设备作为外围设备和Moto G作为中心设备。而且我正在成功连接设备。但我不知道当我从中央设备发送一个特性时,它将从外设接收到哪里?广告回调仅在广告启动成功而不是(在我的例子中是成功的)时才返回
这是我的外设代码
btleGattCallback = new BluetoothGattCallback() {
@Override
// Result of a characteristic read operation
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}
}
@Override
public void onConnectionStateChange(final BluetoothGatt gatt, final int status, final int newState) {
// this will get called when a device connects or disconnects
}
@Override
// New services discovered
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);
} else {
Log.w("doscover", "onServicesDiscovered received: " + status);
}
}
};
BeaconParser bp = new BeaconParser().setBeaconLayout("m:2-3=0,i:4-19,p:20-20");
mBeaconTransmitter = new BeaconTransmitter(this, bp );
// Transmit a beacon with Identifiers 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 2
Long li = new Long(-0l);
ArrayList<Long> l = new ArrayList<Long>();
l.add(li);
Beacon beacon = new Beacon.Builder()
.setId1("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6")
.setId2("1")
.setId3("2")
.setManufacturer(0x00ff) // Choose a number of 0x00ff or less as some devices cannot detect beacons with a manufacturer code > 0x00ff
.setTxPower(-59)
.setDataFields(l)
.build();
mBeaconTransmitter.startAdvertising(beacon);
btManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE) ;
madapter = btManager.getAdapter();
if (madapter != null && !madapter.isEnabled()) {
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent,1);
}
mHandler = new Handler();
btleGattCallback = new BluetoothGattCallback() {
@Override
// Result of a characteristic read operation
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}
}
@Override
public void onConnectionStateChange(final BluetoothGatt gatt, final int status, final int newState) {
Log.w("doscover", "Connected " + status);
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
Log.w("discover", "onServicesDiscovered received: " + status);
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);
} else {
Log.w("doscover", "onServicesDiscovered received: " + status);
}
}
};
devicefound = new ArrayList<BluetoothDevice>();
devices = new ArrayAdapter<String>( this , R.layout.device_name);
ListView pairedListView = (ListView) findViewById(R.id.textView3);
pairedListView.setAdapter(devices);
mleScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
devicefound.add(device);
//UUID = device.getAddress().toString();
//Log.e("Search", "" + device.getName().toString() );
//Toast`.makeText(context,device.getName().toString(), 1 ).show();
Log.e("Search", "" + device.toString());
Log.e("Search", "" + String.valueOf(rssi) );
devices.add("Nex" + device.getName() );
//mBluetoothGatt = device.connectGatt(getActivity(), true, btleGattCallback);
}
};
pairedListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1,
int position, long id) {
dv = devicefound.get(position);
mBluetoothGatt = dv.connectGatt(getApplicationContext() , true, btleGattCallback);
mBluetoothGatt.connect();
dv.createBond();
//BluetoothDevice dd = madapter.getRemoteDevice(devicefound.get(position).getAddress());
if(i == false)
{
Toast.makeText(getApplicationContext(), "Service found. Connected to " + dv.getName() , 1).show();
}
else
{
Toast.makeText(getApplicationContext(), "Already Connected " + dv.getName() , 1).show();
}
i = mBluetoothGatt.connect();
mBluetoothGatt.beginReliableWrite();
boolean b = mBluetoothGatt.discoverServices();
Log.e("Discovery Started", "" + b );
Log.e("get ItemATPosition", "" + adapter.getItemAtPosition(position));
//BluetoothGattService Service = mBluetoothGatt.getService( );
// = Service.getCharacteristic(k);
BluetoothGattCharacteristic characteristic= new BluetoothGattCharacteristic(k,2,1); //Service
characteristic.setValue( "This is a Charects ");
byte[] value = {(byte)91,(byte)92,(byte)93};
characteristic.setValue(value);
boolean st = mBluetoothGatt.writeCharacteristic(characteristic);
//Toast.makeText(getActivity(), t1.getText() + " " + st, 1).show();
boolean b1 = mBluetoothGatt.executeReliableWrite();
//Toast.makeText(getActivity(), t1.getText() + " " + b1, 1).show();
Intent in = new Intent("ACTION_BOND_STATE_CHANGED.");
sendBroadcast(in);
}
});
scanLeDevice(true);
我正在从中央使用连接的Gatt的writeCharacteristic命令,但不知道如何从外围设备端接收
任何形式的帮助都将被感激。
外设模式在IOS上可能支持良好,我建议您使用浅蓝色作为测试目的,从这里:https://itunes.apple.com/us/app/lightblue-bluetooth-low-energy/id557428110?mt=8并且据我所知,安装在nexus 6和nexus 9上的Lollipop5可以支持外设模式,nexus 5不支持。Moto G是否支持外设模式?
问题内容: 我有一个覆盆子pizero W,它通过GPIO引脚连接到流量计,通过USB连接到条形码扫描仪。我有python脚本,当检测到GPIO输入时,该脚本使用回调函数来发出警报。该python脚本需要在pizero上连续运行,以便识别何时激活流量计并处理输入。 问题是我还有一个通过USB连接到pizero的条形码扫描仪。我希望pizero也可以识别何时扫描条形码并处理该输入。 然后,pizer
当建立蓝牙连接(BLE)时,外围设备是否有办法获得中央设备的名称?我不确定Bleno是否有必要的工具来得到这个。
Linux 支持众多的硬件设备,比如:鼠标、打印机、扫描仪、PCMCIA 和 USB 设备。 然而,在安装系统的时候,大部分设备并不需要。 USB 硬件通常工作得很好,只有一些 USB 键盘需要额外地配置(参考 第3.6.4.4节 , "USB BIOS 支持与键盘")。 另外,参考 Linux Hardware Compatibility HOWTO 来判断你的硬件是否被 Linux 支持。
Linux 支持众多的硬件设备,比如:鼠标、打印机、扫描仪、PCMCIA 和 USB 设备。 然而,在安装系统的时候,并不需要其中的大部分设备。
Linux 支持众多的硬件设备,比如:鼠标、打印机、扫描仪、PCMCIA 和 USB 设备。 然而,在安装系统的时候,并不需要其中的大部分设备。
问题内容: 我又来了。 所以,长话短说:在我的应用程序中,我试图借助Android Samples(that)从BLE设备(滴答心率监测器:that)接收数据。但是…我没有从我的设备接收数据!我可以得到特征和描述符,但是……仅此而已。我只是.. 错过了重点 。这是我的代码: __ 这是我的日志: 问题答案: 您有一个电话,但没有回调来接收该值。它是BluetoothGattCallback的一部分