Communication between Wear OS or watchOS SmartWatch and Android/iOS Device with Bluetooth Low Energy (BLE).
This will send and receive messages and/or data to the platform specific wearable communication method. It uses the wearable data layer and messaging API's on android devices and WCSession on iPhones.
-
add
implementation 'com.google.android.gms:play-services-wearable:17.0.0'
to the app level build.gradle -
make sure that the
applicationId
of your WearOS app is the same as the one on your phone app
- iOS deployment target must be at least 9.3
- enable bitcode in you app to support. just follow these instructions to enable apple watch for your app
- For information on how to access the sent data on wearable devices please see the example project
- It is recommended to not rely on instantaneous transfer of data on IOS as applicationContext waits for a "low intensity situation" to set this value between app and watch
Use the static method WatchConnection.sendMessage(Map<String, dynamic> message);
to send a single shot message.
- on android the path
"/MessageChannel"
will be used for all messages
WatchConnection.sendMessage({
"text": "Some text",
"integerValue": 1
});
Use the static method WatchConnection.listenForMessage;
to register a message listener function.
- (android specific) if the message data is a string then the library will assume it is JSON and try to convert it. if that operation fails the message data will be sent to the listener unchanged.
// msg is either a Map<String, dynamic> or a string (make sure to check for that when using the library)
WatchListener.listenForMessage((msg) {
print(msg);
});
Use the static method WatchConnection.setData(String path, Map<String, dynamic> message);
to set a data item with specified path (use wearOS compatible data layer paths)
- (iOS specific) the path variable is used as a key within the application context dictionary
- (iOS specific) data transfer is not instant and will wait for a "low intensity" moment. use this function only to set permanent low priority information
WatchConnection.setData("/actor/cage",{
"name": "Nicolas Saputra",
"awesomeRating": 100
});
Use the static method WatchConnection.listenForDataLayer;
to register a data listener function.
- (android specific) if the data is a string then the library will assume it is JSON and try to convert it. if that operation fails the data will be sent to the listener unchanged.
// data should be a Map<String, dynamic> but can also be a string under exceptional circumstances
WatchListener.listenForDataLayer((data) {
print(data);
});
- Currently does not support nested data structures on android. Therefore it is recommended to send complex items as json strings to be parsed on the recieving end
- Supported types in communications are
- Strings
- Integers
- Floats
- Double
- Long
- Boolean
- Single type lists of strings, floats, ints or longs