Установка напоминания в Wear OSJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Установка напоминания в Wear OS

Сообщение Anonymous »

Можно ли установить напоминание, которое будет предупреждать пользователя с как с часов, так и с подключенного телефона, программно, в Android, с помощью Wear OS (то есть через умные часы Android)? Я могу использовать приложение для напоминаний на своих часах, чтобы установить напоминание, но я не могу сделать это из приложения, которое я разрабатываю и которое выполняется на часах.
Мне сказали, что Чтобы программно установить напоминание (на телефоне), нужно выполнить два шага: первый шаг — отправить данные из Wear OS на телефон. В частности, на устройстве Wear OS используйте API уровня данных для отправки сведений о событиях на телефон.

Код: Выделить всё

import com.google.android.gms.tasks.Task; import com.google.android.gms.wearable.DataClient; import com.google.android.gms.wearable.DataMap;
import com.google.android.gms.wearable.PutDataMapRequest;
import com.google.android.gms.wearable.PutDataRequest;
import com.google.android.gms.wearable.Wearable;
public void sendEventToPhone(String title, long startTime, long endTime, String location) {
PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/calendar_event");
putDataMapReq.getDataMap().putString("title", title);
putDataMapReq.getDataMap().putLong("startTime", startTime);
putDataMapReq.getDataMap().putLong("endTime", endTime);
putDataMapReq.getDataMap().putString("location", location);
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
Task putDataTask = Wearable.getDataClient(this).putDataItem(putDataReq);
}
Следующим шагом является получение данных на телефон и вставка события путем реализации WearableListenerService для получения данных и вставки события в календарь.

Код: Выделить всё

import android.content.ContentValues;
import android.net.Uri;
import android.provider.CalendarContract;
import com.google.android.gms.wearable.DataEvent;
import com.google.android.gms.wearable.DataEventBuffer;
import com.google.android.gms.wearable.DataMap;
import com.google.android.gms.wearable.DataMapItem;
import com.google.android.gms.wearable.WearableListenerService;

public class CalendarEventService extends WearableListenerService {
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for (DataEvent event : dataEvents) {
if (event.getType() == DataEvent.TYPE_CHANGED) {
DataMap dataMap =
DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
if (event.getDataItem().getUri().getPath().equals("/calendar_event")) {
String title = dataMap.getString("title");
long startTime = dataMap.getLong("startTime");
long endTime = dataMap.getLong("endTime");
String location = dataMap.getString("location");
insertEvent(title, startTime, endTime, location);
}
}
}
}

private void insertEvent(String title, long startTime, long endTime, String location) {
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, startTime);
values.put(CalendarContract.Events.DTEND, endTime);
values.put(CalendarContract.Events.TITLE, title);
values.put(CalendarContract.Events.EVENT_LOCATION, location);
values.put(CalendarContract.Events.CALENDAR_ID, 1); // Use the default calendar
values.put(CalendarContract.Events.EVENT_TIMEZONE, "UTC");

Uri uri = getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values);
if (uri != null) {
long eventId = Long.parseLong(uri.getLastPathSegment());
// Optionally, add a reminder
ContentValues reminderValues = new ContentValues();
reminderValues.put(CalendarContract.Reminders.EVENT_ID, eventId);
reminderValues.put(CalendarContract.Reminders.MINUTES, 15);
reminderValues.put(CalendarContract.Reminders.METHOD,
CalendarContract.Reminders.METHOD_ALERT);
getContentResolver().insert(CalendarContract.Reminders.CONTENT_URI,
reminderValues);
}
}
}
Однако для моего приложения это не сработает, так как мне нужно, чтобы напоминание устанавливалось без включения телефона. Причина этого в том, что если пользователю необходим доступ к телефону, нет смысла использовать часы.
Вот некоторые вещи, которые я пробовал, но они не работают:< /p>
Сначала я попробовал следующий код с использованием WearableCalendarContract, и код выдал исключение, указывающее, что вставки с WearableCalendarContract не разрешены.

Код: Выделить всё

   public long createInstance(ContentResolver contentResolver, long i_eventId, long
beginTime, long endTime) {
ContentValues values = new ContentValues();
values.put(CalendarContract.Instances.EVENT_ID, i_eventId);
values.put(CalendarContract.Instances.BEGIN, beginTime);
values.put(CalendarContract.Instances.END, endTime);

Uri uri = null;
try {
uri = contentResolver.insert(WearableCalendarContract.Instances.CONTENT_URI,
values);
}
catch (Exception e){
int x = 1;
}
Cursor cursor = contentResolver.query(WearableCalendarContract.Instances.CONTENT_URI,
new String[]{CalendarContract.Reminders.EVENT_ID }, null, null, null);
int wNumInstances = cursor.getCount();

if (uri == null) {
return Long.parseLong(uri.getLastPathSegment());
}

// Prepare reminder values
values = new ContentValues();
// eventId is the ID of the event
values.put(CalendarContract.Reminders.EVENT_ID, i_eventId);
// or METHOD_EMAIL
values.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT);
values.put(CalendarContract.Reminders.MINUTES, 1); // Reminder 30 minutes before event
// Insert reminder
android.net.Uri uri2 =
contentResolver.insert(WearableCalendarContract.Reminders.CONTENT_URI, values);
Cursor cursor2 = contentResolver.query(WearableCalendarContract.Reminders.CONTENT_URI,
new String[]{CalendarContract.Reminders.EVENT_ID }, null, null, null);
int wNumReminder = cursor2.getCount();
return Long.parseLong(uri2.getLastPathSegment());
}
Далее: я попытался изменить код для использования CalendarContract. Это включало изменение CalendarContract.Instances.EVENT_ID на CalendarContract.Events.EVENT_ID и соответствующие изменения для BEGIN и END. Код больше не выдавал исключение при выполнении вставки, однако вставка не работала. Это было подтверждено путем проверки количества экземпляров в строке кода wNumInstances = курсор.getCount(), указывающей, что wNumInstances= 0, что означает, что никакие элементы не были вставлены. Есть ли способ решить эти проблемы и добавить напоминание?
Наконец, я попытался найти API, который можно использовать с приложением «Напоминание» на телефоне (приложение «Напоминание» каким-то образом можно добавлять напоминания). Мой поиск не нашел ни одного API, который позволил бы моему приложению устанавливать напоминания через приложение «Напоминание», а также не показал никаких других API.

Подробнее здесь: https://stackoverflow.com/questions/786 ... in-wear-os
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»