Как сделать команды для андроид

Сервисные (секретные) коды для смартфонов Android

Сервисные (они же инженерные, они же секретные) коды используются для быстрого доступа к различным функциям, часто даже скрытым. Есть универсальные коды для Android, а есть те, которые доступны только для определенных моделей устройств.

Не так давно я публиковал статью, в которой рассказал, как увеличить громкость звука на Андроид. Для этого можно было использовать специальный софт либо воспользоваться одним из секретных кодов. Сейчас я расскажу о самых популярных из них, благодаря которым можно осуществлять многие настройки системы.

Также рекомендую интересные статьи по теме Android:

Популярные секретные коды для Андроид смартфонов

Почему данные коды называют «секретными»? Просто они не нужны большинству рядовых пользователей, их не публикуют в инструкциях к смартфонам. В первую очередь «secret codes» предназначены для инженеров и разработчиков для проведения различных тестов.

Чтобы использовать любой из сервисных кодов, нужно ввести его в номеронабирателе. На планшетах придется скачать стороннее приложение для осуществления звонков – введите в поиске Google Play запрос «Dialer» и загрузите понравившуюся «звонилку».

  • *#06# — информация об IMEI смартфона
  • *#*#4636#*#* — информация о Wi-Fi, аккумуляторе и статистике использования
  • *#*#3646633#*#* или *#*#83781#*#* — вход в инженерное меню на смартфонах с процессором MTK (через него можно увеличить громкость динамиков и наушников)
  • *#*#8255#*#* — тестирование сервиса Google Talk
  • *#*#7594#*#* — если введете данную комбинацию, после этого, при нажатии кнопки выключения, смартфон будет сразу же выключаться, без предложения меню
  • *#*#44336#*#* — информация о PDA, CSC, времени сборки и прочих данных о смартфоне
  • *#*#232338#*#* — MAC адрес Wi-Fi
  • *#*#7780#*#* — моментальный сброс к заводским настройкам (Hard Reset). Удаляет только приложения
  • *2767*3855# — моментальный сброс настроек до заводских, но в отличии от предыдущего способа Android полностью переустанавливается
  • *#*#1234#*#* или *#12580*369# — информация о прошивке устройства
  • *#*#1111#*#* — информация о FTA софтверной версии
  • *#*#2222#*#* — информация о FTA хардверной версии
  • *#*#0283#*#* — тест Loopback
  • *#*#0*#*#* — тест экрана
  • *#0*# — тестирование различных компонентов: экрана, камеры, динамиков, вибрации, микрофона и прочих
  • *#*#0673#*#* или *#*#0289#*#* — тест аудио
  • *#*#0842#*#* — тест вибрации и подсветки
  • *#*#232339#*#* или *#*#526#*#* — тест беспроводной сети
  • *#*#1472365#*#* — тест GPS
  • *#*#1575#*#* — подробный тест GPS
  • *#*#232331#*#* — тест Bluetooth
  • *#*#232337#*#* — показать Bluetooth-адрес
  • *#*#2663#*#* — версия сенсорного экрана
  • *#*#2664#*#* — тестирование сенсорного экрана
  • *#*#0588#*#* — тестирование датчика движения
  • *#*#7262626#*#* — тест сигнала GSM
  • *#197328640# — переход в сервисный режим
  • *#*#3264#*#* — версия RAM памяти
  • *#*#8351#*#* — активация режима регистрации голосового набора
  • *#*#8350#*#* — выключение режима регистрации голосового набора
  • #*5376# — удаление всех SMS
  • *#2222# — версия прошивки Android
  • #*2562#, #*3851#, #*3876# — перезагрузка смартфона, планшета
  • *#34971539# — полная информация о камерах и обновлении их прошивок
  • *#*#273283*255*663282*#*#* — быстрое создание резервной копии медиафайлов
  • *#*#4636#*#* — секретное меню для устройств Motorola
  • **05***# — разблокировка PUK на Sony
  • 3845#*855# — сервисное меню на LG G3
  • *#0011# — сервисное меню на Samsung Galaxy S4
  • ##778 (+кнопка вызова) — выводит на экран EPST-меню (для Samsung)
  • ##3424# — режим диагностики (для HTC)
  • ##3282# — EPST (для HTC)
  • ##8626337# — VOCODER (для HTC)
  • ##33284# — технические данные состояния сети (для HTC)
  • ##7738# — ревизия протокола (для HTC)

В принципе, это самые основные и универсальные сервисные (секретные) коды для планшетов и смартфонов на Андроид, но все производители добавляют поддержку своих собственных, поэтому, если вас интересуют коды для отдельного аппарата, скачайте приложение Secret Codes. О нем пойдет речь ниже.

Сервисные коды Android в приложении Secret Codes

Приложение Secret Codes просканирует систему на наличие инженерных кодов и выдаст результат в виде списка. Вам достаточно будет только нажать на интересующий код и вы перейдете к нужной опции.

К сожалению, у этого способа есть минус: на некоторых устройствах приложение не находит ни единого сервисного кода, а на некоторых находит не все. Но на протестированных мною девайсах все было отлично, да и отзывы в Google Play практически все положительные.

Источник

Я протестировал «Быстрые команды» для Android. Это какая-то дичь

«Быстрые команды», которые появились в iOS 12, на мой взгляд, являются одним из главных преимуществ iOS над Android. Благодаря им мне удалось расширить функциональные возможности своих устройств, научив их такому, чего ни один Android-смартфон ни за что не сделает при помощи штатных инструментов. Благодаря «Быстрым командам» я научил свой iPad распаковывать архивы без стороннего софта, запускать видео из YouTube в режиме «картинка-в-картинке» и даже искать активные прокси-сервера для Telegram. У Google, к сожалению, ничего такого не было. Ну, по крайней мере, я так думал, пока не узнал о существовании приложения IFTTT (скачать), которое многие называют «Быстрыми командами» для Android.

У Быстрых команд есть аналог на Android, и это IFTTT

Классные фишки iOS, которых мне остро не хватает на Android

Что такое IFTTT

IFTTT – это приложение для автоматизации на Android многих бытовых процессов, благодаря чему удаётся существенно облегчить использование смартфона и вообще расширить его возможности. Название IFTTT представляет собой аббревиатуру, которая расшифровывается, как If this then that, что в приблизительном переводе на русский язык значит «если то, тогда так». Проще говоря, это приложение, которое выполняет различные сценарии, активируясь автоматически при срабатывании какого-то триггера. Например, если температура воздуха на улице опустилась ниже 0 градусов Цельсия, оно пришлёт вам уведомление, и т.д.

Несмотря на то что IFTTT и «Быстрые команды» имеют общую природу, они устроены немного по-разному. В IFTTT все доступные сценарии, которыми можно воспользоваться, уже добавлены по умолчанию, а вот в «Быстрых командах» есть только часть из многих существующих, потому что большую часть из них создают энтузиасты. Поэтому для iOS шорткаты – так ещё называют команды – зачастую приходится искать на сторонних ресурсах, что может быть неудобно, учитывая ограничения, которые Apple устанавливает из соображений безопасности.

Как установить IFTTT

Ищете сценарии для YouTube? Так и пишите — YouTube

Честно говоря, мне подход IFTTT нравится больше, потому что возможность найти всё в одном месте для меня является преимуществом. Кроме того, для удобства пользователей в IFTTT сценарии поделены на разделы: Google, Sonos, Smart Home, Music и множество других. Я специально даю названия разделов на английском, потому что IFTTT не имеет поддержки русского языка. Впрочем, учитывая, что все ваши манипуляции с приложением будут сводиться только к добавлению команд, описание которых даётся в предельно простом виде, это не должно стать проблемой.

Установка IFTTT производится точно так же, как и у «Быстрых команд». Но если «Быстрые команды» для iOS нужно скачивать из App Store, за IFTTT для Android по понятным причинам нужно идти в Google Play. Перейдите по этой ссылке, скачайте приложение и пройдите авторизацию: это можно сделать как с помощью аккаунта Google, Facebok, так и с помощью учётной записи Apple, которая позволит скрыть ваш реальный адрес электронной почты. Я именно так и сделал.

Читайте также:  Андроид перестал загружать файлы

Как пользоваться IFTTT

Признаюсь честно, я сам пока разбираюсь с IFTTT и продолжаю открывать для себя все его возможности, поэтому, возможно, о каких-то скрытых или неявных фишках ещё могу не знать. Однако того, что я уже о нём узнал, мне хватило, чтобы понять – это и близко не похоже на то, что предлагает Apple. Мало того, что изрядная часть сценариев не работает в принципе, так они ещё и не предлагают тех же возможностей, что и «Быстрые команды» на iOS.

Наши читатели, с подачи которых я решил воспользоваться IFTTT, утверждали, что на Android команды работают не хуже, чем на iOS, но это было чистой воды лукавством. Нет, конечно, я допускаю, что это я что-то сделал не так, но это никак не оправдывает IFTTT. Ведь значит, что разработчики так намудрили, что если у меня не получилось разобраться в нём, значит, не получится и у подавляющего большинства пользователей. Впрочем, не верьте мне на слово, а попробуйте сами.

Все сценарии хранятся в библиотеке IFTTT и их не нужно искать на стороне

Запустите IFTTT, в нижней части экрана нажмите на кнопку Get more и перед вами появится окно со всеми доступными сценариями, которые вы можете установить себе. Многие из них требуют обязательной авторизации, поэтому не удивляйтесь, если при активации сценария он попросит подтвердить действие в аккаунте Google.

Что может IFTTT

IFTTT действительно предлагает большое количество вариантов автоматизации, вот только удобных среди них не так много.

  • С помощью IFTTT можно создавать сценарии для управления умным домом Xiaomi, добавив себе команду Google Assistant x Yeelight;
  • IFTTT позволяет настроить оповещения о полной зарядке смартфона, что довольно удобно, если вы боитесь, что аппарат проведёт у розетки слишком много времени, а его аккумулятор деградирует раньше времени;

IFTTT удобен в некоторых сценариях, но слишком уж редко это происходит

  • IFTTT удобен в сценариях, предполагающих работу с геолокацией. Благодаря ему я смог настроить отключение мобильных сетей при заходе домой с автоматическим включением Wi-Fi и наоборот – для экономии заряда;
  • IFTTT реально удобно работает со штатными приложениями сообщений для Android, отправляя послания близким в случае, если аккумулятор смартфона вот-вот разрядится, чтобы те не переживали.

Автоматизация Android

На этом всё. Других полезных сценариев мне найти не удалось. Никакой возможности загрузки видео из YouTube, ни функции перехода в режим «картинка-в-картинке» при выходе из приложения, ни быстрого поиска прокси-серверов для Telegram, которыми я активно пользуюсь – ничего такого там нет. Нет, конечно, IFTTT позволяет сохранять ссылки на видео из YouTube в Dropbox и другие облачные хранилища, но на кой чёрт мне эти ссылки, если я хочу скачать видео и иметь возможность смотреть его прямо на смартфоне без подключения к интернету?

Apple решила подобрать для iOS 14 то, что давно выбросили из Android

В общем, скажу так: IFTTT имеет право на жизнь, если вам хочется поиграть с автоматизацией и проверить, что это такое, на себе. Это приложение может пригодиться в простейших сценариях вроде тех, что я описал выше – например, при автовключении и отключении сотового соединения и Wi-Fi, — но не более того. Для по-настоящему крутых манипуляций, которые способны расширить возможности вашего смартфона или планшета, — вам к Apple и её «Быстрым командам».

Новости, статьи и анонсы публикаций

Свободное общение и обсуждение материалов

Сейчас буквально в каждом обновлении софта разработчики говорят о безопасности, а известные мессенджеры до сих пор соревнуются в этом параметре. Во всех популярных приложениях для обмена сообщениями нас предупреждают, что данные находятся под чуткой защитой. Аргументируют это обычно уведомлением «Все сообщения в чате защищены сквозным шифрованием», после которого появляется ощущение, что все находится под контролем. Предлагаю перестать слепо доверять разработчикам и наконец выяснить, что такое сквозное шифрование и зачем это нужно простому пользователю.

В самое ближайшее время мы услышим много новостей из мира технологий о том, какие телефоны должны выйти во второй половине 2021 года. Несмотря на то, что прошлая неделя уже подарила нам сразу четыре крутых линейки устройств, впереди нас ждет еще много всего интересного. Мы ожидаем много новостей от Apple, Samsung, Google и других компаний. Давайте рассмотрим некоторые из устройств, за которыми мы особенно внимательно следим, в том числе те, у которых, по слухам, есть обновления камеры и даже свежие идеи в целом для индустрии. Все расскажем о том, какими устройствами мы будем пользоваться в ближайшем будущем.

Chrome – пожалуй, самое популярное приложение Google, независимо от платформы. Пользователи любят фирменный браузер поискового гиганта за его логику и удобство. Во всяком случае, других причин им пользоваться лично я не вижу. Он далеко не самый быстрый, не самый лёгкий, а применительно к мобильной версии ещё и не самый функциональный. Ведь расширения, которые доступны на десктопах, на смартфонах не действуют – видимо, чтобы окончательно не портит впечатление о быстродействии браузера. Но ведь есть и другие проблемы.

Вся эта автоматизация в Андроиде была придумана очень давно. В 2013 году была у меня Motorola Droid RAZR Maxx, там это было в прошивке и называлось Motorola Smart Actions.
Сейчас пользуюсь Sony Xperia XZ1, в прошивке тоже есть Xperia Actions.
Вещь вроде и полезная, но практически (мною) не используемая.

на последних самсунгах тоже вроде как есть быстрые команды, там можно свои составлять и набирать целый ряд действий.

Источник

Как сделать команды для андроид

Скрипты на shell под Android

Тема посвящена созданию, отладке скриптов на шелле, а также освоению и изучению всевозможных утилит командной строки Андроида.
Для полноценной реализации желаемого под Андроидом как правило понадобятся root-права и busybox.
Данная тема выросла из темы Tasker (родительская тема), поэтому не удивляйтесь, если Вас внезапно отправят туда. (Tasker — это шелл в Андроиде.) Из данной темы выросла дочерняя тема Ядро Linux изнутри, все вопросы по ядру следует задавать в ней.

В теме нет куратора. Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать Куратором (предварительно изучив шапку темы и все материалы для кураторов).
До назначения куратора, по вопросам наполнения шапки, обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.

Сообщение отредактировал derak1129 — 22.06.20, 23:05

Для начала перетащу своё сообщение из темы Таскера для лучшего понимания вопроса, о чём речь, и как можно применить.

# помощь урок таскер tasker пример шелл shell перехват аппаратных кнопок

Описание примера Работа shell-скрипта для перехвата аппаратных кнопок телефона.

Знатокам команд ОС linux и их специфики — не смеяться.

Читайте также:  Как сделать джойстик для андроида

Нужен рут и busybox .

Всесторонняя поддержка была оказана уважаемым username11, где я порой только нажимал на кнопки, следуя множеству его мудрых советов.
Данный пример — оффтоп! 😀 потому что таскер в нём не участвует. Совсем. Только шелл, только хардкор. Пример кстати рабочий))
Так как это только пример, каждый может растащить его на множество кусочков и использовать нужные части в связке со своими нуждами.

Вообще, текста будет много, потому что я болтун..

Приступим к делу. Вот результирующий пример, и сразу напишу, что он делает, а потом разбор:

Итак, эта строчка (это ОДНА строчка) запущенная в терминале, или через Задачу Таскера «Run script» запускается в память (и висит там! терминал можно закрывать) и делает следующее: Она отслеживает нажатие аппаратной кнопки Громкость Вниз (думаю на большинстве Xperia заработает тоже, официально отлажено под Xperia Ray) при выключенном экране, и включает (и выключает) фонарик.

Начнём, пожалуй, с перехвата кнопок. Как наиболее интересующую общественность возможность. Надо не забывать при этом, что штатные функции телефона, происходящие при нажатии той или иной кнопки, телефоном параллельно ловятся и функции отрабатывают. Так что, повесить исключительно «свои» полезняшки на нажатия не получится. Почему я и упростил в процессе изучения перехвата себе задачу — реагирую я на кнопки только при выключенном экране. При штатной блокировке телефон не реагирует на кнопки громкости при выключенном экране.

Вообще, получается красиво: нажимаешь качельку громкости и МГНОВЕННО включается фонарь, а экран при этом остаётся выключенным.

Отладка скрипта, это собственно 99.9 процента всего времени, потраченного на, поэтому гораздо удобнее «общение» будет проводить в проводном или беспроводном adb. Вертеть варианты отладки через терминал телефона утомительно. (а отладки будет много).

Часть 1. Перехват. Теория.

Итак, перехват. Подглядывать за нажатиями кнопок мы будем программой (консольной текстовой программой) «ПолучитьСобытие», getevent. Можно просто набрать (с рут правами) в терминале имя команды и завороженно смотреть на бегущие строки))
# getevent

Да, вот такие пачки на каждое действие!
0004 0004 00000004
0001 0072 00000001
0000 0000 00000000
0004 0004 0000000c
0000 0000 00000000
0004 0004 00000014
0000 0000 00000000
0004 0004 0000001c
0000 0000 00000000
0004 0004 00000024
0000 0000 00000000

0004 0004 00000024
0000 0000 00000000
0004 0004 00000004
0001 0072 00000000
0000 0000 00000000
0004 0004 0000000c
0000 0000 00000000
0004 0004 00000014
0000 0000 00000000
0004 0004 0000001c
0000 0000 00000000

Так система (а мы подглядываем за реальными кодами, которые обрабатывает и система) различает нажатия, отжатия, а так же — _долгие_ нажатия, если они есть. То есть, если ловить «Долгую громкость вниз» — то это всё ручками, самим засекать сначала нажатие, и какая была пауза до отжатия, ну, до удержания, да. А только потом вызывать своё действие. До этого у меня пока руки не дошли, но есть такой ключик ‘-t’ — показывать временные отметки каждого прилетевшего кода.

Понажимав все свои три кнопки)) я пришёл к выводу о достаточности в моём частном случае ловли кода ‘0004 0004 00000004’, правда он случается и в нажатии и в отжатии, но это мы поймаем и учтём.

username11 пишет, что реальным кодом действия (нажатия, возни по тачу, еще какой датчик) служит первая строка, а остальные это «эхо системы» на первое действие — какие-то, как я понял, генерации уже «софтовые», дополнительных кодов для других системных ловушек. Что бы в другом нужном процессе тоже возникло срабатывание на действие. В добавок: по моей логике, коды-пачки нулей — это есть завершение «описания» кода. То есть, каждый ноль (‘0000 0000 00000000’) это конец логической «строки» event’а. В любом случае это лир.отступление, к делу его не пришьёшь, а коды ловить придётся))

Итак, я выбрал для ловли кнопки Громкость Вниз код всего лишь одной строки ‘0004 0004 00000004’, который уникален в пределах устройства pm8058-keypad (/dev/input/event1).
Дальше в дело вступает команда read в замесе с командой while, в таком виде:

формализованно: «ввод_данных | while read var1; do [наша построчная обработка] ; done»

разбор:
ввод_данных в данном случае это наш поставщик данных, «getevent /dev/input/event1»
вертикальная палка это перенаправление вывода консоли (то, что мы видим как появляющиеся строки после команды getevent) в другую команду на обработку дальше. (да, я пишу для таких валенков, как я)).
while read совокупность команд делающих следующее: while («пока») обеспечивает нам бесконечный цикл считывания строк «из-под» getevent’а, а read («читать») каждую строку вида ‘0004 0004 0000001c’ распихивает по переменным шелла, имена которых указаны после слова ‘read‘.
Например. Команда «ввод_данных | while read dev code» первое «слово» ДО РАЗДЕЛИТЕЛЯ (у нас это пробел) положит в переменную dev, а остальной хвостик (до конца строки) в переменную code. (Обращаться в шелле к значениям переменным мы потом будет $dev и $code). И равны они будут dev=’0004′, code=’0004 0000001c’. А если переменных будет скажем три: «ввод_данных | while read dev code1 code2», то наш пример, поданный на вход команды, она раскидает так: dev=’0004′, code1=’0004′, code2=’0000001c’. Правда здоровско?
Сам я пришёл к локальному выводу, что мне проще ловить ВСЮ строку (‘0004 0004 00000004’) в одну переменную, то есть у меня это ‘while read code’. И одну переменную $code уже сравнивать на нужное значение.

Всё, что идёт за знаком «точка с запятой» (semicolon, так сказать) после команды read, это есть команды обработки результата «распихивания» _каждой_ строки с кодами, прилетающей от getevent.

Локальный вывод: То есть, заказали мы прерывания от устройства event1, аппаратных кнопок, и всё, всё «висит» и бездействует. Система спит. Нажатие кнопки (любой) пробуждает систему (она отрабатывает сама) и присылает в getevent пачку строк с произошедшими событием. Мы раскидываем полученные строки с помощью while read на составляющие и уходим на дальнейшую обработку каждой строки отдельно, сравнивая, наша ли эта, искомая, строка, или нет. И потом запускаем боевую нагрузку, выполняем какое-то действие (включаем фонарик, как я, или вызываем сразу задачу таскера). (В принципе, вот всё решение). Но, об этом всём в своё время, ниже, а пока меня ждала целая серия засад:

Часть 2. Workarounds. Первое столкновение с практикой.

Сразу же после того, как я ринулся в бой, у меня ничего не заработало. Простая проверочная команда:
# getevent /dev/input/event1 | while read code; do echo $code; done
..ничего не показывала!
(смысл команды: получаем из getevent массив строк, с помощью while read переменная растаскиваем массив на строки и просто в каждом цикле командой echo выводим значение переменной (значок бакса перед именем), в данном случае всю строчку залпом, она в единственной переменной code).

Чудом я обнаружил, что показывает она результат, если понажимать кнопки много раз. Оказалось следующее. На «палке» идёт буферизация! То есть, перенаправление потока данных из-под getevent работает, конечно же, но система буферизирует данные — собирает их в кучку и отдаёт дальше только после накопления некоего объёма, видимо около 4к. И username11 даёт следующий совет: взять команду бизибокса script и обрамить ею вышеозначенную строку. Как я понял, script велит системе знать «устройство вывода» как (условно) tty, а не блочное устройство. И просовывать через «палку» каждый байт сразу, не дожидаясь накопления полного буфера.
То есть следующая проверочная команда замечательно заработала:
# script -q -c ‘getevent /dev/input/event1’ /dev/null | while read code1 code2 code3; do echo «code1:$code1, code2:$code2, code3:$code3»; done
(да, вывод команды script пришлось не забыть спустить в унитаз /dev/null)
(этот пример выводит при нажатии кнопок пачки строк вида: «code1:0004, code2:0004, code3:00000004» теперь не сутулясь и полной грудью, СРАЗУ после нажатия, ничего не откладывая в ящик).

Читайте также:  Самый лучший андроид обзор

Однако, настало время разбора результатов нажатий и отсев нужных, это для меня было совершенно свежо)) Вылилось это, после многодневного (неспешного) изучения инет манов-факов-хавтушек в следующее:
# script -q -c ‘getevent /dev/input/event1’ /dev/null | while read code1 code2 code3; do [ «$code1» = «0004» -a «$code2» = «0004» -a «$code3» = «00000004» ] && echo «code1:$code1, code2:$code2, code3:$code3» ; done
(строчечка уже «ого», да. Значит, что я делаю: рву каждую строчку на три части, code1-3, и затем сравниваю последовательно значение code1 с 0004, и так далее, и в итоге вывожу результат ТОЛЬКО на нужное мне нажатие (знак && говорит о том, команда echo выполнится только в случае выполнения всего сравнения в квадратных скобках)).
НЕ РАБОТАЕТ! ((
Я опять к начальству. (причём, как я потом выяснил в процессе перебирания разных вариантов, два первых сравнения работают! затык в третьем). Долго я мыкался, пока не был наставлен на команду познакового вывода данных:
# script -q -c ‘getevent /dev/input/event1’ /dev/null | od -cb
(она выводит значения байтов текста в разных форматах, ну, типа строчка 12345 будет выглядеть как 31 32 33 34 35). И сразу после было обнаружено, что в конце, за последним 00000004 кроме штатного линуксячьего знака переноса строки 0D, еще затесался (совершенно «ДОСовский») 0A. И конечно while read законно пихает его в последнюю переменную, в моём случае в code3. А сравнение-то у нас до знака, если в конце строки левый хвостик, то сравнение и не получается.
Начальник напредлагал мне (уже на грани моего понимания линуксовой ком.строки) вариантов этого очередного обхода, я остановился на вот таком:
тут первые проверки ] && echo «$code3» | grep -q ‘^00000004.$’ && echo «code1:$code1 (а в конце пошёл вывод через echo)
Заработало!
(как я понял, поиск строки через grep с ключом ‘-q’ даёт значение true/false в наш боян каскад двойных амперсендов && по сборке логики сравнения. Циркумфлекс и бакс с точкой остались уже ЗА пределами моего понимания, но верю, что это поиск от начала строки и опускание произвольного конца, того самого, что прилепился из знаков 0D и 0A).

Таким образом, полный поиск моей последовательности (напомню, ‘0004 0004 000000004’) БЕЗ боевой пока нагрузки, стал выглядеть так:
(code я опять, набаловавшись с дроблением строки на части, слепил в кучу, всё равно у меня пока один полностроковый код)
# script -q -c ‘getevent /dev/input/event1’ /dev/null | while read code; do echo «$code» | grep -q ‘^0004 0004 00000004.$’ && echo «code:$code»; done
(и выкинул квадратные скобки, всё равно основной результат даёт grep)
Вот, первый результат. В терминале выводится одна строчка на нажатие нужной мне кнопки, и одна на отжатие. На другие кнопки ничего не выводится. Можно привинчивать включение/выключение фонаря!

Часть 3. Фонарик. Долгая дорога в дюнах.

Ну, тут я прилично еще поплутал, Начальник подсказал, как проще сделать «переключалку» на командной строке, из 0 в 1 и обратно, _одной_ командой. (как я спросил: «как сделать xor ax,1» ))) Оказалось: а=$(expr 1 — $a).

Я заранее знал «переменную» включения фонаря, у меня (думаю, и на всех xperias так же) это /sys/class/leds/torch/brightness. Значение 0 не светит, 255 — светит. (и все промежуточные от 3 до 255 работают, но да про красиво-плавно включаемый фонарик и как я писал бинарь на си для андроида прямо на телефоне, это сказ отдельный)).
Еще мне нужно было найти, включен экран в данный момент или нет, потому что получая управление в точке echo code:$code я решительно (пока) не представлял, что с экраном. А если он включен, это штатное системное изменение громкости, и в ДАННЫЙ момент включать фонарик совершенно не обязательно.
Полазив, я нашёл. Рядом. /sys/class/leds/lcd-backlight/brightness тоже, 0-255, что ли. По крайней мере выключенный экран «0», включенный — НЕ ноль.

Ииии.. я запилил. Полный скрипт вы видели уже в начале. Ой, нет, это еще не всё)))

Часть 4. Последняя засада

В итоге username11 научил меня обрамлять всё скобками, за которыми писать одиночный амперсенд, &. Признак того, что скрипт должен остаься висеть в памяти системы, остаться резидентом. И отдать управление в командную строку. И тут была последняя засада — стоит напустить скрипт резидентом, он переставал работать! Так работает, а резидентом — нет! Как выяснилось после команды ps (список всех процессов), что мой скрипт в памяти-то висит, а хочет ввода-вывода, (я так ине нашёл, что за команда «хочет»), поэтому система его тормозит и ничего делать ему не даёт.
В итоге мне пришлось в конце для решения этой проблемы (еще один, последний, костыль)) написать:
# ( весь мой стрипт ) /dev/null 2>/dev/null &
(то есть всех охочих до общения спустить в унитаз).

Теперь всё заработало.

Повторим))
# (rep=0; script -q -c ‘getevent /dev/input/event1’ /dev/null | while read code; do torch=`cat /sys/class/leds/torch/brightness`; screen=`cat /sys/class/leds/lcd-backlight/brightness`; (echo «$code» | grep -q ‘^0004 0004 00000004.$’) && [ «$rep» = «0» ] && [ «$screen» = «0» ] && ( torch=$(expr 255 — $torch); echo «$torch» > /sys/class/leds/torch/brightness ); rep=$( expr 1 — $rep ); done ) /dev/null 2>/dev/null &
Что я делаю в скрипте:
— инит двоичной переключалки для ловли нажатия и отжатия
— после while read попадаем в основной разбор, что за строка прилетела
— читаю текущее значение фонаря
— читаю текущее значение экрана
— и дальше большое условие, сконкатенированное по && из условий:
— это наш код
— это нажатие (а не отжатие)
— экран выключен
— инверсия значения фонаря
и боевая нагрузка:
— запись нового значения фонаря (если был выключен — включает и наоборот)
— инверсия значения переключалки нажатия-отжатия.

Домашнее задание от username11 я так пока и не выполнил((, а оно вот:
1) выяснить, кто хочет ввода-вывода и устранить.
2) убрать лишние круглые скобки. каждые скобки, это лишний шелл запущенный каскадом.

Такскера тут вообще нет, как вы видите. Справившись с половиной этого дела, отсутствие таскера было уже делом принцпа)) зачем? когда всё «шелльно» и легко. А огромная дурильня-таскер испортит всю красоту. Да и для чего? Мигнуть фонариком?

Таскер по идее, как Начальник неоднократно писал, должен вызываться через am broadcast в «теле» боевой части.

Возможно, это не то, чего ждали массы)) но в любом случае, что-то почерпнуть полезное можно.
Любые советы, правки, возможные будущие _Приложения_ к этому сообщению, снятие костылинга, решения домашнего задания — решительно принимаются!

Сообщение отредактировал username11 — 23.02.20, 15:49

Источник

Оцените статью