H
HyperfishNov. 14, 2019, 1: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, 5: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
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
VD

C++ - Test 001. The first program and data types

  • Result:73points,
  • Rating points1
Ds

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

  • Result:64points,
  • Rating points-1
o

C++ - Test 001. The first program and data types

  • Result:86points,
  • Rating points6
Last comments
D:

QML - Lesson 016. SQLite database and the working with it in QML Qt

Добрый день, пытаюсь разобраться и подргнать пример под себя. Есть бд с огромным количеством полей. В приложении на виджетах при использовании QTableView все работает и путем простого sql запрос…

Django - Tutorial 039. Adding private messages and chats on the site - Part 2 (Dialogue and chat counter with unread messages)

Добавляйте поле файла в модель сообщения. И в форме сообщения указывайте, что поле с файлом.
s

Django - Tutorial 023. Like Dislike system using GenericForeignKey

все, я со всем разобрался!) Извините!)
s

Django - Tutorial 023. Like Dislike system using GenericForeignKey

Доброго времени суток!) Я случайно набрел на вашу статью, и она помогла мне решить некоторые мои трудности, я прошел за вами по шагам, в попытках адаптировать это под себя, и возник вопрос. У ва…
Now discuss on the forum
M

QML: изменение стиля при наведении и при нажатии на кнопку

enabled = false перестанет быть активной и не будет ни на что реагировать) Хм.. по-моему пробовал такое. Проверю ещё раз после работы. Ура, спасибо большо…
U

Динамическое наполнение StackView QML

Во затупил))) Спасибо за все))) StackView.push("ModuleTip1.qml") ну или в сложной иерархии StackView.push("qrc:/folder/ModuleTip1.qml") и всего делов... Не пойму, почему сра…

QEventLoop тормозит при удалении экземпляра

Думаю, что нет. Лучше вообще без исключений, но не всегда возможно.
s

Ключевое слово class

Разобрался,на стаковерфлоу нашел топик и понял почему так происходило .

Поведение пустой очереди std::queue

Спасибо, так и сделал.
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB