Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 2

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

19.11.2019, 21:14. Показов 1455. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

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

Будильник нормально работает со следущим кодом (без задания дней недели, однократно):
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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_HOUR = QAndroidJniObject::getStaticObjectField<jstring>("android/provider/AlarmClock",
                                                                                  "EXTRA_HOUR");
intent.callObjectMethod("putExtra",
                        "(Ljava/lang/String;I)Landroid/content/Intent;",
                        EXTRA_HOUR.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));
Вопрос в том, с какой переменой нужно вызывать следущий код для установки дня недели:

C++ (Qt)
1
2
3
4
5
6
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 ?

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

Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.11.2019, 21:14
Ответы с готовыми решениями:

AlarmClock ATMega16 pcf8583
Добрый день. Ни как не могу заставить это чудо пищать динамиком при срабатывании будильника. При срабатывании в протеусе PORD.0...

JNI
как запускать JNI что бы можно было использовать функции С/С++ в Java можете описать?? Добавлено через 51 минуту как использовать ...

Модули JNI
Я долгое время не могу понять почему у меня не добавляются модули jni в fmx проект, я и в папку с проектом pas кидал и в debug dcu файлы,...

2
фрилансер
 Аватар для Алексей1153
6461 / 5663 / 1130
Регистрация: 11.10.2019
Сообщений: 15,079
19.11.2019, 21:52
попробуй ещё такие варианты, может что подойдёт
QVector<int>, QList<int>, QVariantList, QStringList
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 2
23.11.2019, 18:25  [ТС]
Такое не канает.
F:\Sourses\AlarmClock\alarmclock.cpp:112 : ошибка: cannot cast from type 'QList<int>' to pointer type 'jintArray' (aka '_jintArray *')
Вот так тоже не работает

C++ (Qt)
1
2
3
4
5
6
 int array[] = {2,5};
    
    intent.callObjectMethod("putExtra",
                            "(Ljava/lang/String;[I)Landroid/content/Intent;",
                            EXTRA_DAYS.object<jstring>(),
                            jintArray(array));
Вопрос остается открытым

Добавлено через 19 минут
если использовать jintarray, программа падает.

Добавлено через 9 минут
полный код метода
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
void AlarmClock::createTimer(const QString &message, const int hour, const int minute) const
{
    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_DAYS = QAndroidJniObject::getStaticObjectField<jstring>("android/provider/AlarmClock",
                                                                                      "EXTRA_DAYS");
    int array[] = {2,5};
 
    intent.callObjectMethod("putExtra",
                            "(Ljava/lang/String;[I)Landroid/content/Intent;",
                            EXTRA_DAYS.object<jstring>(),
                            jintArray(array));
 
    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 activity = QtAndroid::androidActivity();
    QAndroidJniObject packageManager = activity.callObjectMethod("getPackageManager",
                                                                 "()Landroid/content/pm/PackageManager;");
    QAndroidJniObject componentName = intent.callObjectMethod("resolveActivity",
                                                              "(Landroid/content/pm/PackageManager;)Landroid/content/ComponentName;",
                                                              packageManager.object());
    if (componentName.isValid())
        QtAndroid::startActivity(intent, 0);
}
Добавлено через 59 минут
Вот правильный рабочий код, думаю, кому надо, поймет.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
    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);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.11.2019, 18:25
Помогаю со студенческими работами здесь

Java, Хорстманн, JNI
Здравствуйте. Заканчиваю чтение 9-ого издания книги Хорстманна. Последняя глава - платформенно-ориентированные методы. Уже не знаю, где...

JNI return class
Вопрос, из за которого рушится дипломный проект. Обьясните, или дайте сылку на источник, как возможно вернуть в java из с++ вектор...

JNI и Android studio
Цель: вывести метод шифрования в отдельный модуль на C++ (Для усложнения реверсинженеринга). Может есть актуальный пример как это...

Первая программа с jni
Здярова! Нужно пробраться в реестр, джава я так понимаю не имеет такой возможности. Думаю использовать jni, но имел с ним дело...

JNI fatal error
Добрый день! Возникла проблема при работе с созданной мной dll через нативный интерфейс. В созданной мною dll реализована функция,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru