Примеры кода программирования Metawatch?
Есть ли хорошие примеры кода MetaWatch? Учебники? Статьи блога?
Я нашел https://github.com/Pedlar/MetaWatch, но это настоящий проект, а не пример кода. Я хотел бы что-то менее сложное.
UPD: еще один проект https://github.com/cicada-dev/cicada и еще один вопрос мета-часов (к сожалению, факторинг заслуживает серьезной критики): отправка данных через Bluetooth с Android.
1 ответ
Вот пример программирования MetaWatch. Вроде, знакомство с Bluetooth и MetaWatch, с чего можно начать.
Он отправляет одну команду и получает один ответ; может вызываться из onCreate ().
static byte[] getDevTypeMessage = new byte[] {
0x01, 0x06, 0x01, 0x00, 0x0B, (byte) 0xD9 //The CRC is 0xD90B
};
BluetoothSocket socket = null;
void helloMetaWatch() {
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
Log.e("~~~","no bluetooth");
} else {
Log.e("~~~","found bluetooth");
if (!mBluetoothAdapter.isEnabled()) {
Log.e("~~~","bluetooth not enabled");
} else {
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
// If there are paired devices
if (pairedDevices.size() > 0) {
Log.d("~~~","paired devices: "+pairedDevices.size());
// Loop through paired devices
for (BluetoothDevice device : pairedDevices) {
Log.d("~~~","device: ["+device+"] addr="+device.getAddress()+" name=["+device.getName()+"] type:"+getBTType(device)+" class:"+device.getBluetoothClass());
if(device.getName().contains("MetaWatch")) {
BluetoothSocket temp = null;
try
{
//temp = btDevice.createRfcommSocketToServiceRecord(myUUID);
// calling an undocumented method:
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
temp = (BluetoothSocket) m.invoke(device, 1);
} //catch(IOException e) { }
catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
socket = temp;
Log.d("~~~","socket="+socket);
try {
socket.connect();
} catch (IOException e) {
Log.e("~~~","~~~ could not connect:");
e.printStackTrace();
}
InputStream tmpIn = null;
OutputStream tmpOut = null;
try
{
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
tmpOut.write(getDevTypeMessage);
// read response
long start = System.currentTimeMillis();
while (System.currentTimeMillis() - start <= 1000) {
if (0 != tmpIn.available()) {
int readByte = tmpIn.read();
Log.d("~~~","Read: " + readByte);
} else {
Log.d("~~~","waiting");
try {
Thread.sleep(10,0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println("Complete in " + (System.currentTimeMillis() - start) + "ms");
}
catch(IOException e) {
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} else {
Log.d("~~~","no paired devices");
}
}
}
}
@SuppressLint("NewApi")
String getBTType(BluetoothDevice device) {
try {
return ""+device.getType();
} catch (Throwable x) {
return null;
}
}
Выход (в adb logcat
) нравится как:
D/~~~ (26862): waiting
D/~~~ (26862): Read: 1
D/~~~ (26862): Read: 7
D/~~~ (26862): Read: 2
D/~~~ (26862): Read: 0
D/~~~ (26862): Read: 2
D/~~~ (26862): Read: 95
D/~~~ (26862): Read: 226
D/~~~ (26862): waiting
D/~~~ (26862): waiting
D/~~~ (26862): waiting
(7 строк "ожидания" до того, как результат станет доступен, и 89 после его прочтения, вы можете угадать время).
Если MetaWatch не готов принять соединение, он покажет
E/~~~ (26736): ~~~ could not connect:
W/System.err(26736): java.io.IOException: read failed, socket might closed or timeout, read ret: -1