[Приложение] мой MjDM (Android)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Пт фев 21, 2020 8:04 pm

Итак, думаю, пора зарелизить последние наработки... чтобы двигаться дальше.

v1.3.0 (build 69, code version 27)
  • По просьбе пользователей переработана логика отображения значка WiFi в имени сервера (в общем списке серверов).
    Теперь он отображается если сервер находится на альтернативном адресе.
  • Также, добавлена возможность сохранять одинаковые имена WiFi точек доступа в разных серверах.
    Логика работы теперь следующая:
    • При обнаружении точки доступа происходит переход на первый сервер по списку, где указана эта точка.
      (если указан еще и альтернативный адрес, - разумеется, спрыгнет на него)
    • Если в списке еще есть сервера, где перечислена эта же точка, они пока не трогаются. При выборе такого сервера вы либо сразу попадете на альтернативную страницу (если сервер ранее не был открыт), либо просто достаточно нажать ДОМОЙ, чтобы программа спрыгнула на альтернативный адрес
    • При смене точки WiFi происходит переход на другой сервер, где есть данная точка.
    • Если WiFi просто пропал (вышли из зоны действия), то текущий сервер смотрит, надо ли ему перейти на основной (глобальный) адрес. И, возможно, возвращается на него.
  • Добавлена возможность включить кнопку "Скопировать", с помощью которой можно взять в буфер адрес текущей открытой страницы.
    При длинном тапе на этой кнопке в буфер берется ссылка в готовом для обмена формате с метассылкой. Об этом ниже...
  • Введена поддержка приложением собственного метатэга (uri-схемы) mymjdm://...
    На данный момент поддерживаются 2 команды:
    • mymjdm://openurl/?url=http(s)://ссылка&user=логин&pass=пароль
      Открыть указанную ссылку.
      Если basic-авторизация не требуется, то user и pass указывать не нужно.
      Ссылка открывается в отдельном окне, которое в списке серверов не отображается. При переходе на какой-нибудь ранее созданный сервер вы на эту ссылку уже не вернетесь (придется дергать ещё раз). То есть она "как бы" одноразовая (получил, посмотрел, и при любом действии закрывающем это окно - она закрылась...).
      При открытии таких внешних ссылок изменена логика работы кнопок "Домой" и "Обновить" - они заблочены, т.к. если делать данные кнопки активными, в некоторых ситуациях возникает двусмысленность... Проще дать понять пользователю, что теперь ему просто следует выбрать нужный сервер из списка.
    • mymjdm://download/?url=http(s)://ссылка/файл&user=логин&pass=пароль
      Для скачивания файла по ссылке.
      Если basic-авторизация не требуется, то user и pass указывать не нужно.
      Файлы складываются во внутреннее хранилище, в папочку /Download . При повторном запросе скачивания файл автоматически перезаписывается поверх старой копии.
  • Добавлена поддержка работы myMJDM в качестве Терминала (то есть поддержка MajorDroidAPI). Включить данную возможность можно в Настройках приложения.
    За основу взята официальная спецификация команд отсюда: viewtopic.php?f=5&t=518
    Количество команд было увеличено, некоторые переработаны.
    Чтобы устройство корректно работало терминалом, нужно чтобы сервер MDM видел его напрямую (пинговал без проблем). Поэтому наиболее актуально это для локальный сетей.
    Также, как становится понятно из специфики самого приложения, - оно может являться Терминалом сразу всех серверов и обрабатывать входящие команды любого сервера.

    На текущий момент поддерживаются следующие команды:
    • stop terminal или stop server
      Останавливает терминальный сервис на устройстве. Сам он уже не запустится. Как минимум нужно перезапустить приложение.
    • about
      Открывает экран "О приложении"
    • settings
      Вызов экрана настроек Приложения
    • home
      Переход на домашнюю страницу. Если список серверов пуст, переход никуда не осуществляется. Если была загружена внешняя страница (например по команде url: или по схеме mymjdm://openurl), то осуществляется переход на домашнюю страницу первого по списку сервера.
    • refresh
      Обновляет текущую страницу.
      Если загружена внешняя ссылка командами mymjdm://openurl или через терминал командой url: , то refresh и home ничего делать не будут (согласно выше оговоренной политике работы с такими страницами).
    • url:ссылка
      Переход по указанной ссылке.
      Команда аналогична внешней команде со схемой mymjdm://openurl/?url=http(s)://ссылка&user=логин&pass=пароль за исключением того, что согласно MajorDroidAPI параметры авторизации не поддерживаются. Поэтому программой будет предпринята попытка использовать логин/пароль последнего активного сервера. Если ресурс все-таки требует авторизации, а эта пара логин/пароль не прокатит - будет отлуп...
    • hi
      Запустить автоматически голосовое распознавание (если оно включено в Настройках приложения).
      Если в этот момент игралась какая-то мелодия по команде play:url (см.ниже), воспроизведение будет прервано.
    • voice
      Аналогично hi.
      Запустить автоматически голосовое распознавание (если оно включено в Настройках приложения).
    • tts:текст
      Произнести фразу. Фраза будет проговорена если в системе устройства имеется корректно работающий голосовой движок и данная опция отмечена в Настройки\Терминал.
      Фразы, отправленные друг за другом, становятся в очередь воспризведения.
      Если в этот момент игралась какая-то мелодия по команде play:url (см.ниже), воспроизведение будет приостановлено и возобновится после проговаривания всех фраз.
    • ask:текст
      Произнести фразу и перейти в режим ожидания голосового ввода.
      Если в этот момент игралась какая-то мелодия по команде play:url (см.ниже), воспроизведение будет прервано.
    • play:url
      Проиграть звуковой файл, расположенный по адресу url.
      Пример: play:http://<сервер_MDM>/cms/sounds/dingdong.mp3
      Если http:// не указано, приложение само это подставит в адрес.
      Если по ссылке требуется basic-авторизация, то будет попытка применить логин/пароль с открытого активного сервера, поскольку MajorDroidAPI опять же не предусматривает никаких полей с данными для авторизации...
    • stop
      Остановить проигрывание звукового файла, вызванное командой play:url
    • pause
      Приостановить проигрывание звукового файла, вызванное командой play:url, запомнив позицию
      Если вы не планируете продолжать проигрывание файла, то с некоторыми допущениями команду можно рассматривать как stop, однако Терминал продолжает поддерживать соединение до ранее указанного файла, думая что последует resume.
    • resume
      Продолжить проигрывание звукового файла (вызванное ранее командой play:url), с запомненной позиции по команде pause
      Повторный вызов play:url сбросит позицию и начнет проигрывание файла с начала
    • run://приложение
      Запустить приложение, установленное в системе. Следует указать имя пакета.
      Пример: run://com.google.android.calendar
    • avolume:уровень
      Установить громкость будильника (ALARM) на заданный уровень (0...100%)
    • rvolume:уровень
      Установить громкость звонка (RING) на заданный уровень (0...100%)
    • nvolume:уровень
      Установить громкость уведомлений (NOTIFICATION) на заданный уровень (0...100%)
    • mvolume:уровень
      Установить громкость музыки (MEDIA) на заданный уровень (0...100%)
    • volume:уровень
      Установить громкость медиа и уведомлений (MEDIA + NOTIFICATION) на заданный уровень (0...100%)
      Обратите внимание, что на некоторых устройствах громкость звонков и уведомлений рассматривается как единая.
    • brightness:уровень
      Установить яркость дисплея в диапазоне 0...100%.
      Автояркость при этом будет принудительно выключена (если она включена в Настройках устройства).
      Для работы этой функции на Android M и выше требуется дополнительное системное разрешение.
    • info или status или getterminalinfo или getterminalstatus
      Вернуть на сервер полную информацию о терминале в формате JSON.
      Пример содержимого JSONПоказать

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

      {
        "appname":"myMjDM",
        "appversion":"1.2.3 (build 22, code version 27)",
        "devicename":"Sony F8332",
        "serial":"CB512DRQTM",
        "ip":"192.168.1.100",
        "os":"Android SDK 26 (8.0.0)"
        "battery":"77%",
        "fullscreen":true,
        "immersive":false,
        "recognition":true,
        "listening":false,
        "listening_keyphrase":"алиса",
        "currentserver":"мой Сервер",
        "brightness_auto":1,
        "brightness":"47%",
        "volume_alarm":"100%",
        "volume_ring":"86%",
        "volume_notification":"86%",
        "volume_media":"73%"
      }
      
      Как данные попадают назад? Предусмотрено 2 пути:
      1. Данные по-умолчанию незамедлительно отправляются назад на сервер в порт 7999, в том же формате JSON.
        Отловить их на сервере можно, если предыдущий запрос вы сделали так:

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

        $unswer = socket_write($socket, $in, strlen($in)); //ожидать ответа
        socket_close($socket); 
        
      2. Можно дополнительно вернуть данные любому скрипту GET-запросом, если по каким-то причинам принять ответ в порт не удобно.
        Для этого в Настройках приложения указывается путь к такому скрипту (относительно корня сервера) и имя параметра, значение которого вы будете затем парсить.
        Например /status.php?status=
        То есть при вызове данной команды приложение попытается на текущий открытый сервер отправить информацию по адресу:
        <сервер>/status.php?status={...json...}
        Если данная настройка пуста, сработает лишь 1 вариант.
    • set:параметр=значение
      Семейство команд для изменения параметров самой программы прямо "находу".
      • set:screenon=[false, true, 0, 1]
        Экран всегда включен. Значение можно указывать как false/true, так и 0/1
      • set:fullscreen=[off, on, false, true, 0, 1]
        Включить/Выключить полноэкранный режим. Значение можно указывать как off/on, так и false/true или 0/1
      • set:immersive=[off, on, false, true, 0, 1]
        Включить/Выключить иммерсию полноэкранного режима (режим дополнительного скрытия наэкранных кнопок). Значение можно указывать как off/on, так и false/true или 0/1
      • set:toolbar=[off, on, false, true, 0, 1]
        Включить/Выключить верхнюю строку с названием сервера (тулбар). Значение можно указывать как off/on, так и false/true или 0/1
    Пример вызова команд из платформы MDMПоказать
    На основе приведенного ниже кода можно строить скрипты, шаблоны или методы устройств и т.п.:

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

    $address='192.168.0.170'; //ip-адрес терминала, явно видимый с сервера MDM
    $service_port='7999';
    $in='tts:проверка'; //команда для отправки
    
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
        echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "<br/>\n";
        return 0;
    }
    $result = socket_connect($socket, $address, $service_port);
    if ($result === false) {
        echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
        return 0;
    }
    socket_write($socket, $in, strlen($in));
    socket_close($socket); 
  • Добавлено всеми долгожданное голосовое управление (преобразование голоса в текст).
    Активируется в Настройках. Распознанная фраза отправляется на текущий открытый активный сервер в виде
    <адрес_сервера>/command.php?qry=<фраза>
  • Распознанную фразу также можно отправлять на кастомный скрипт. Для этого предусмотрено дополнительно поле ввода.
    Например: <адрес_сервера>/modules/myvoice.php?voice=<фраза>
  • Добавлена возможность вынести дополнительную кнопку микрофона в правый нижний угол экрана
    ИллюстрацияПоказать
    Screenshot_20200216-154012.png
    Screenshot_20200216-154012.png (135.6 КБ) 3374 просмотра
  • Также добавлена возможность постоянно слушать эфир и реагировать на ключевую фразу (например, "Алиса").
    Проговариваемое выражение должно начинаться с ключевой фразы. Например "Алиса включи свет".
    Можно настроить, вызывать ли при обнаружении ключевой фразы дополнительный диалог распознавания или сразу отправлять выражение на сервер. В первом случае остаток фразы будет пропущен, что бы вы ни наговорили после ключевого выражения, а затем будет вызвано стандартное системное окно голосового ввода.
  • На экран "О приложении" добавлена ссылка на данный форум для получения пользователями свежей информации и документации по приложению.
  • Устранена проблема с иммерсивным полноэкранным режимом на некоторых устройствах Samsung и LG, а также на устройствах с дисплеями типа "cutout" (например, Samsung A10/S10).
  • Обновленная Политика конфиденциальности при использовании приложения.
  • Прочие улучшения, исправление недочетов и ошибок...


Как обычно - файл .аpk для тех, кто обновляется вручную
Остальные пользователи получат обновление автоматически с GooglePlay
Вложения
mymjdm_v1.3.0_b69_cv27.zip
(2.1 МБ) 165 скачиваний
Последний раз редактировалось hc2hunter Ср фев 26, 2020 9:26 am, всего редактировалось 1 раз.
За это сообщение автора hc2hunter поблагодарили (всего 4):
andrey040670 (Пт фев 21, 2020 8:45 pm) • skysilver (Сб фев 22, 2020 12:23 am) • Afeck (Сб фев 22, 2020 3:27 am) • sorochan.ilya (Вс мар 01, 2020 2:32 pm)
Рейтинг: 4.65%
pash4uga
Сообщения: 192
Зарегистрирован: Чт окт 04, 2018 12:04 pm
Благодарил (а): 28 раз
Поблагодарили: 45 раз

Re: [Приложение] мой MjDM (Android)

Сообщение pash4uga » Сб фев 22, 2020 10:07 am

pash4uga писал(а):
Чт фев 20, 2020 6:14 pm
tarasfrompir писал(а):
Чт фев 20, 2020 5:17 pm
сори за оффтоп- сейчас много изменил в терминалах2 - проведу тесты - и можно будет в бой. Хотя тестировать уже можно... На то она и Альфа
Обязательно проверю на выходных и отпишусь.
Проверил, терминал команды от сервера получает, появляются всплывающие окошки. Но при этом звука нет.
Если отключить распознавание речи, то все норм.
Видимо приложение не может изменять громкость на терминале.
За это сообщение автора pash4uga поблагодарил:
hc2hunter (Сб фев 22, 2020 5:59 pm)
Рейтинг: 1.16%
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: [Приложение] мой MjDM (Android)

Сообщение tarasfrompir » Сб фев 22, 2020 10:36 am

pash4uga писал(а):
Сб фев 22, 2020 10:07 am
pash4uga писал(а):
Чт фев 20, 2020 6:14 pm
tarasfrompir писал(а):
Чт фев 20, 2020 5:17 pm
сори за оффтоп- сейчас много изменил в терминалах2 - проведу тесты - и можно будет в бой. Хотя тестировать уже можно... На то она и Альфа
Обязательно проверю на выходных и отпишусь.
Проверил, терминал команды от сервера получает, появляются всплывающие окошки. Но при этом звука нет.
Если отключить распознавание речи, то все норм.
Видимо приложение не может изменять громкость на терминале.
видимо постоянное распознавание занимает полностью звуковую систему или звук полностью тушится
Спасибо нам ПОМОЖЕТ..!
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Сб фев 22, 2020 7:30 pm

pash4uga писал(а):
Сб фев 22, 2020 10:07 am
Проверил, терминал команды от сервера получает, появляются всплывающие окошки. Но при этом звука нет.
Если отключить распознавание речи, то все норм.
Видимо приложение не может изменять громкость на терминале.
Вы уже жаловались на данный эффект если включен именно режим прослушивания (listening).
Я пробовал объяснить возможные причины. Возможно, нехододчиво получилось... или просто пропустилось мимо.

Смысл там в том, что Google не дает прямой механизм использования постоянного прослушивания (как, например, его OK Google). Видимо это такой маркетинговый ход, а может безопасность в их понимании, тут я х.з...
Но в итоге приходится данный режим реализовывать "костылями". В частности циклическим запуском распознавания в фоновом режиме. так вот, когда новый цикл сменяет предыдущий - происходит специфический звук (типа "бип"), который разумеется будет бесить.
Единственный вариант - глушить поток MEDIA целиком пока работает фоновое прослушивание. К сожалению, более толковых решений я не нашел во всех реализациях. Включая знаменитую библиотеку "Сфинкс". Там сделано все точно так же...

Перед выпуском я все перепроверил, вроде на моих устройствах работает вполне годно. Алгоритмом предусмотрено, что в момент прихода команды типа tts: прослушивание останавливается, громкость возвращается, воспроизводится звук, затем снова включается прослушивание.
Раз что-то получилось некорректно под Android 5 - мы обязательно вернемся к этому вопросу после выходных, и попробуем с Вами разные варианты и пробные билды приложения (если Вы не против, конечно).
В конце-концов, выдрочили же мы этот Samsung с его голюнами и косяками... И со звуком тоже что-то придумаем.

Но на данный момент релиз был просто необходим... иначе мы все тут погрязли в бесконечном расширении функционала.
Иногда нужно прерваться, осмотреться и зафиксировать результат, чтобы потом двигаться дальше.
За это сообщение автора hc2hunter поблагодарили (всего 3):
pash4uga (Сб фев 22, 2020 7:42 pm) • tarasfrompir (Сб фев 22, 2020 8:23 pm) • cplusmax (Вт фев 25, 2020 2:28 pm)
Рейтинг: 3.49%
pash4uga
Сообщения: 192
Зарегистрирован: Чт окт 04, 2018 12:04 pm
Благодарил (а): 28 раз
Поблагодарили: 45 раз

Re: [Приложение] мой MjDM (Android)

Сообщение pash4uga » Сб фев 22, 2020 7:41 pm

С удовольствием помогу тестированием)
За это сообщение автора pash4uga поблагодарил:
hc2hunter (Сб фев 22, 2020 8:15 pm)
Рейтинг: 1.16%
klv666
Сообщения: 175
Зарегистрирован: Вс янв 20, 2019 10:48 am
Благодарил (а): 64 раза
Поблагодарили: 19 раз

Re: [Приложение] мой MjDM (Android)

Сообщение klv666 » Сб фев 22, 2020 9:06 pm

Попробовал распознавание в постоянном режиме, вроде все ок, но не все.
Фраза на сервер приходит без первой буквы
СпойлерПоказать
Снимок.JPG
Снимок.JPG (27.26 КБ) 3287 просмотров
Хотя фраза распознается верно, это видно во всплывающем окне на планшете.
За это сообщение автора klv666 поблагодарил:
hc2hunter (Вс фев 23, 2020 9:14 am)
Рейтинг: 1.16%
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Вс фев 23, 2020 9:13 am

эм... а в качестве ключевой фразы что используется, если не секрет?
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Вс фев 23, 2020 9:37 am

klv666 писал(а):
Сб фев 22, 2020 9:06 pm
Попробовал распознавание в постоянном режиме, вроде все ок, но не все.
Фраза на сервер приходит без первой буквы
<...>
Хотя фраза распознается верно, это видно во всплывающем окне на планшете.
Попробуйте эту сборочку. Вроде нашел недочет, проявляющийся в некоторых ситуациях.
Есть и еще некоторые некритичные огрехи, которые обнаружил, но, к сожалению, в ближайшие 2 дня не имею возможности поработать над приложением... :( Будем уже дальше править и улучшать после выходных... простите, коллеги :cry:


И, пользуясь случаем, - с ПРАЗДНИКОМ всех! Крепкого всем здоровья, успехов в начинаниях и семейного благополучия! :)
Вложения
app-release.zip
(2.1 МБ) 132 скачивания
За это сообщение автора hc2hunter поблагодарили (всего 2):
klv666 (Вс фев 23, 2020 10:23 am) • cplusmax (Вт фев 25, 2020 2:29 pm)
Рейтинг: 2.33%
klv666
Сообщения: 175
Зарегистрирован: Вс янв 20, 2019 10:48 am
Благодарил (а): 64 раза
Поблагодарили: 19 раз

Re: [Приложение] мой MjDM (Android)

Сообщение klv666 » Вс фев 23, 2020 10:23 am

hc2hunter писал(а):
Вс фев 23, 2020 9:37 am
klv666 писал(а):
Сб фев 22, 2020 9:06 pm
Попробовал распознавание в постоянном режиме, вроде все ок, но не все.
Фраза на сервер приходит без первой буквы
<...>
Хотя фраза распознается верно, это видно во всплывающем окне на планшете.
Попробуйте эту сборочку. Вроде нашел недочет, проявляющийся в некоторых ситуациях.
Есть и еще некоторые некритичные огрехи, которые обнаружил, но, к сожалению, в ближайшие 2 дня не имею возможности поработать над приложением... :( Будем уже дальше править и улучшать после выходных... простите, коллеги :cry:


И, пользуясь случаем, - с ПРАЗДНИКОМ всех! Крепкого всем здоровья, успехов в начинаниях и семейного благополучия! :)
Спасибо, попробую. Ключевое слово временно указал "планшет" , так как дома есть Алиса от яндекса.
Кстати, в фразах начинающихся с включи/выключи не обрезается первая буква
Всех мужчин с праздником!

Попробовал, стало нормально выводиться в чат с любым ключевым словом!!!,

а раньше работало нормально только с алисой.
Иногда кажется создается какая то тупая очередь, если несколько запросов подряд задать, что то теряется. В расширении хромгейт в аналогичной ситуации вроде меньше глючит
За это сообщение автора klv666 поблагодарил:
hc2hunter (Пн фев 24, 2020 8:52 am)
Рейтинг: 1.16%
Аватара пользователя
hc2hunter
Сообщения: 507
Зарегистрирован: Сб дек 02, 2017 10:45 am
Откуда: RUS
Благодарил (а): 228 раз
Поблагодарили: 348 раз

Re: [Приложение] мой MjDM (Android)

Сообщение hc2hunter » Пн фев 24, 2020 1:30 pm

Однако, если речь про Хромгейт на PC, там и распознавание голоса работает совсем не так, как в Андроид... (никто не ставит палки в колеса и не расставляет заборы).
Ответить