Я создал приложение. В этом приложении у вас есть объекты, которые содержат 2 строки (имя и возраст) и растровое изображение (аватар). Все сохраняется в базе данных sqlite.Обменивайтесь объектами от телефона до android wear
Теперь я хочу, чтобы эти объекты были доступны на моих умных часах. Поэтому я хочу достичь этого, чтобы начать, запустить приложение и прокрутить влево и вправо, чтобы увидеть эти объекты.
Это означает, что я должен восстановить объекты с телефона и получить их на часах.
В настоящее время я задаюсь вопросом, правильно ли я сделал все, или что я должен делать по-другому. Всякий раз, когда вы запускаете приложение на своих часах, я отправляю запрос на телефон, чтобы я хотел объекты.
private void sendMessage() {
if(mGoogleApiClient.isConnected()) {
new Thread(new Runnable() {
@Override
public void run() {
NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
for(Node node : nodes.getNodes()) {
Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), REQUEST_PET_RETRIEVAL_PATH, null).await();
}
}
}).start();
}
}
По телефону, я получаю это сообщение и отправляет сообщение обратно с объектом.
public void onMessageReceived(MessageEvent messageEvent) {
super.onMessageReceived(messageEvent);
if (messageEvent.getPath().equals(REQUEST_PET_RETRIEVAL_PATH)) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle connectionHint) {
final PutDataMapRequest putRequest = PutDataMapRequest.create("/send-pets");
final DataMap map = putRequest.getDataMap();
File imgFile = new File(obj.getAvatar());
Bitmap avatar;
if(imgFile.exists()) {
avatar = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
} else {
avatar = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
}
Asset asset = createAssetFromBitmap(avatar);
map.putAsset("avatar", asset);
map.putString("name", obj.getName());
map.putString("age", obj.getDateOfBirth());
Wearable.DataApi.putDataItem(mGoogleApiClient, putRequest.asPutDataRequest());
}
@Override
public void onConnectionSuspended(int cause) {
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
}
})
.addApi(Wearable.API)
.build();
mGoogleApiClient.connect();
}
На часах я получаю объект.
public void onDataChanged(DataEventBuffer dataEvents) {
final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents);
for(DataEvent event : events) {
final Uri uri = event.getDataItem().getUri();
final String path = uri!=null ? uri.getPath() : null;
if("/send-pets".equals(path)) {
final DataMap map = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
String name = map.getString("name");
String age = map.getString("age");
Asset avatar = map.getAsset("avatar");
Bitmap bitmap = loadBitmapFromAsset(avatar);
}
}
}
Теперь я застрял с 2 вопроса:
1) Является ли это путь или я должен решить по-другому?
2) Возможно ли послать сразу несколько объектов или мне просто нужно поместить цикл вокруг детали в метод onConnected и отправить каждый объект отдельно?
Спасибо за подтверждение :) –
Что произойдет, если я хочу отправить пользовательский объект, содержащий три других пользовательских объекта? Должен ли я помещать на карту каждое отдельное поле объекта отдельно? –