H
Nov. 14, 2019, 12:27 p.m.

Преобразование AlarmClock EXTRA_DAYS для JNI callObjectMethod в Qt 5.13

Здравствуйте!

Возникла необходимость установить будильник по дням недели в Qt.

Будильник нормально работает со следущим кодом (без задания дней недели, однократно):

QAndroidJniObject ACTION_SET_ALARM = QAndroidJniObject::getStaticObjectField<jstring>("android/provider/AlarmClock",
                                                                                      "ACTION_SET_ALARM");
QAndroidJniObject intent("android/content/Intent",
                         "(Ljava/lang/String;)V",
                         ACTION_SET_ALARM.object<jstring>());

QAndroidJniObject EXTRA_MESSAGE = QAndroidJniObject::getStaticObjectField<jstring>("android/provider/AlarmClock",
                                                                                   "EXTRA_MESSAGE");
QAndroidJniObject messageObject = QAndroidJniObject::fromString(message);
intent.callObjectMethod("putExtra",
                        "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",
                        EXTRA_MESSAGE.object<jstring>(),
                        messageObject.object<jstring>());

QAndroidJniObject EXTRA_LENGTH = QAndroidJniObject::getStaticObjectField<jstring>("android/provider/AlarmClock",
                                                                                  "EXTRA_HOUR");
intent.callObjectMethod("putExtra",
                        "(Ljava/lang/String;I)Landroid/content/Intent;",
                        EXTRA_LENGTH.object<jstring>(),
                        jint(hour));

QAndroidJniObject EXTRA_MINUTES = QAndroidJniObject::getStaticObjectField<jstring>("android/provider/AlarmClock",
                                                                                  "EXTRA_MINUTES");
intent.callObjectMethod("putExtra",
                        "(Ljava/lang/String;I)Landroid/content/Intent;",
                        EXTRA_MINUTES.object<jstring>(),
                        jint(minute));

QAndroidJniObject EXTRA_SKIP_UI = QAndroidJniObject::getStaticObjectField<jstring>("android/provider/AlarmClock",
                                                                                  "EXTRA_SKIP_UI");
intent.callObjectMethod("putExtra",
                        "(Ljava/lang/String;Z)Landroid/content/Intent;",
                        EXTRA_SKIP_UI.object<jstring>(),
                        jboolean(true));

Вопрос в том, с какой переменой нужно вызывать следущий код для установки дня недели:

QAndroidJniObject EXTRA_DAYS = QAndroidJniObject::getStaticObjectField<jstring>("android/provider/AlarmClock",
                                                                                  "EXTRA_DAYS");
intent.callObjectMethod("putExtra",
                        "(Ljava/lang/String;и здесь?)Landroid/content/Intent;",
                        EXTRA_DAYS.object<jstring>(),
                        что здесь должно быть?);

В документации сказано, что:

EXTRA_DAYS

public static final String EXTRA_DAYS
Bundle extra: Weekdays for repeating alarm.

Used by ACTION_SET_ALARM.

The value is an ArrayList < Integer > . Each item can be:

Calendar.SUNDAY,
Calendar.MONDAY,
Calendar.TUESDAY,
Calendar.WEDNESDAY,
Calendar.THURSDAY,
Calendar.FRIDAY,
Calendar.SATURDAY
Constant Value: "android.intent.extra.alarm.DAYS"

Чем тогда в Qt заменить Java тип ArrayList ?

Спасибо!

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
3

Добрый день.

Пробовали jintArray ?

H
  • Nov. 15, 2019, 4:18 a.m.
  • (edited)
  • The answer was marked as a solution.

Да, пробовал, с преобразованием int array[]={1,2,3,4,5,6,7} в jintArray(array).
Если так, то программа компилируется без ошибок и предупреждений, но вываливается с ошибкой времени выполнения. Наверное, я что-то делаю не так.
А если так:
jintArray(5) //Четверг
то тоже крашется.

H

Не всё так просто.
Вот правильный рабочий код. Если надо, поясню.

jintArray array;
jint values[]={2,5};
QAndroidJniEnvironment env;
array = env->NewIntArray(2);
env->SetIntArrayRegion(array,0,2,values);

intent.callObjectMethod("putExtra",
                        "(Ljava/lang/String;[I)Landroid/content/Intent;",
                        EXTRA_DAYS.object<jstring>(),
                        array);

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Donate

Hello, Dear Users of EVILEG!!!

If the site helped you, then support the development of the site financially, please.

You can do it by following ways:

Thank you, Evgenii Legotckoi

GS
Jan. 23, 2020, 3:04 p.m.
Galina Stepanіvna Shepeljuk

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:10points,
  • Rating points-10
GS
Jan. 23, 2020, 2:51 p.m.
Galina Stepanіvna Shepeljuk

C++ - Тест 003. Условия и циклы

  • Result:71points,
  • Rating points1
M
Jan. 23, 2020, 3:28 a.m.
Mitrider

C++ - Тест 003. Условия и циклы

  • Result:71points,
  • Rating points1
Last comments
Jan. 21, 2020, 1:12 p.m.
Docent

Полезная статья. Как всегда - то что надо. Добавлю ещё маленькую полезность - после установки tracer (88 строка) и перед выводом значений в lineEdit (91 строка) стоит добавить updatePositio…
Jan. 17, 2020, 1:31 a.m.
Andrej Jankovich

Выглядит как ошибка библиотеки. Расскажите подробно на какой платформе вы собираете проект (MinGW или MSVC) их версии и версии Qt.
D
Jan. 16, 2020, 11:06 a.m.
DENIZ1819

Доброго времени суток, не подскажите, что делать в данной ситуации, после того, как я сделал все вышеуказанные инструкции для подключения библиотеки к проекту?
Jan. 14, 2020, 4:33 a.m.
Evgenij Legotskoj

Рекомендую Wt, достаточно мощная вещь. Этот фреймворк может использоваться для написания сайтов на C++, либо можно использовать только отдельный компоненты, например только ORM. Но я не знаю, ка…
a
Jan. 14, 2020, 4:29 a.m.
ayb

Спасибо за инфу. Поиск качественной ORM привел меня только к sqlite_orm, но не подходит из-за необходимости полноценной поддержки c++14. Про framework Wt не слышал, спасибо за наводку.
Now discuss on the forum
Jan. 24, 2020, 2:24 a.m.
Evgenij Legotskoj

Добрый день Попробуйте использовать метод deleteLater() у объектов Data . В этом случае удаление происзодит немного позже, но уже тогда, когда другие части программы…
Jan. 24, 2020, 1:37 a.m.
Evgenij Legotskoj

Не уверен. я бы попробовал выдернуть ссылки и забрать всё через QNetworkAccessManager, если вам не нужно запускать эти скрипты. Я с той ошибкой не сталкивался.
Jan. 23, 2020, 11:54 a.m.
Intruder

Евгений, с удалением строк разобрался. Спасибо за помощь. Немного пришлось модернизировать код, но все получилось вроде.
Jan. 22, 2020, 5:06 a.m.
Pavel.K

Можете попробовать через Loader сделать, те cделать свой компонент ректангл с нужными вам полями и через Loader вызывать этот компонент , а через Connections прописать что ваш компонент отрисова…
Jan. 22, 2020, 3:25 a.m.
Pavel.K

Привет, кто-нибудь делал тестовый Json сервер , чтобы не просто через сокет ByteArray пересылать, а с клиента обрабатывать Post и get запросы? Буду очень признателен если у кого то есть пр…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB