2025-05-29

Cтранный баг в Android с языками физической клавиатуры

Когда я подключил клавиатуру к телефону на Android, чтобы посмотреть как она будет с ним работать я обнаружил что не работает русская раскладка.  Подключил другую внешнюю клавиатуру - тоже самое, язык вроде бы переключается а печатает все равно по английски. Уверен, я раньше точно мог печатать по-русски — а теперь, при переключении языка, всё равно набираются английские символы.

Перепробовал всё: менял настройки, переустанавливал Gboard, сбрасывал раскладки — ничего не помогало. Казалось, клавиатура просто "забыла", что умеет русский.

И тут я решил попросить жену — она часто печатает на своем планшете и у неё на Android всё работает как надо. Она пошла в настройки и проделала ровно то же самое, что и я, но у неё всё завелось. При этом когда я делал тоже самое у меня не работало. Магия?

Нет. Просто нюанс интерфейса, о котором я не знал, даже два нюанса.

Оказывается, в Android для каждой физической клавиатуры можно отдельно настроить список языков. При этом для переключения используются два сочетания клавиш — через Ctrl + Space и Shift + Space. При этом переключают они что-то свое. Shift + Space переключает язык экранной клавиатуры при этом физическая клавиатура продолжает печатать на английском, а вот Ctrl + Space переключает язык физической клавиатуры хотя экранная показывает, что вы печатаете на другом языке.

Второй нюанс заключается в том, настроить нужные языки для физической клавиатуры не так просто. Сама форма настройки запрятана довольно глубоко в дебрях настроек, но даже если вы ее найдете то добавить язык сможете не с первого раза. Когда вы настраиваете список языков для физической клавиатуры, в списке языков рядом с каждым пунктом есть переключатель. Я всегда нажимал по нему — по ползунку справа. А вот жена нажала по названию самого языка. И только в случае тапа по названию языка Android сохраняет выбор языка. Если нажимать только по переключателю — выбранный язык не сохраняется, и после выхода из меню всё сбрасывается. Скорее всего это баг интерфейса, но он стабильно воспроизводится.

Вывод: Если на Android у вас не работает русская раскладка с внешней клавиатурой — не трогайте переключатели справа! Нажимайте именно по названию языка, чтобы он сохранился в системе.

Надеюсь, эта заметка сэкономит кому-то пару часов нервов.

 

Оставить комментарий

 
  2025-03-21

Xiaomi Watch 2

После того как мои старые часы приказали долго жить, наконец выбрал себе новую модель — это Xiaomi Watch 2. За 150 евро тут есть всё, что мне нужно: Wear OS с возможностью устанавливать приложения из Google Play и возможность создавать для часов свои приложения.

В часах есть NFC для оплаты, но у меня пока не получается его настроить — мой банк не присылает код активации, а вместо этого присылает инструкцию, как активировать сервис из банковского приложения, которого у меня на часах, понятное дело, нет. Но самое приятное — что теперь я наконец смогу научиться разрабатывать приложения под Wear OS — давно хотел попробовать, как это делается!

 

Оставить комментарий

 
  2025-01-01

Программа для синхронизации заметок на телефоне

Долгое время использую для синхронизации связку Termux + git и доволен как слон. Однако настройка всего этого занимает массу времени и подходит только для технических задротов вроде меня. Подумал, существует ли что-то проще? Поиски в сети не дали каких-либо работающих решений, поэтому мне стало интересно, а можно ли запрограммировать что-то с нуля. Оказалось, что вполне реально. Существует реализация JGit под Java, которая вполне работает, если ее встроить в Android-приложение. Единственную проблему, которую я сейчас пытаюсь решить, это то, что файлы должны быть доступны в общем хранилище андроид-устройства, а напрямую доступа в это хранилище у Android-приложения нет, поэтому приходится дополнительно к операциям с git реализовать операции копирования из внутреннего хранилища устройства во внешнее и наоборот. Как сделать проще, я пока не придумал. Из-за этого мое решение работает значительно медленнее, чем решение на базе Termux. В принципе, не сильно критично, но неприятно - у меня в заметках несколько тысяч файлов, и ждать полторы минуты вместо сорока секунд, когда они синхронизируются, мне не хочется...

Если получится ускорить решение опубликую на Play Market вдруг такая программа не только мне окажется полезной?

Upd: Проблему со скоростью решил, теперь работает даже быстрее чем Termux, потестирую еще некорое время на предмет багов, но кажется получилось что-то полезное...

 

Оставить комментарий

 
  2024-11-13

Пасхалка под андроид

Если несколько раз ткнуть в номер версии в в секции About в настройках Андроид то вылазит вот такая фигня - что это?

Вот здесь говорят что это пасхалка, но мне кажется, что кроме того что она показывает цифру 11 и котиков, она должна что-то еще делать....

 

Оставить комментарий

 
  2023-06-06

Получение SMS сообщений в Telegram

Иногда бывает нужно пересылать входящие SMS сообщения в Telegram. Раньше в Play Market было полно приложений умеющих это делать, но последнее время они куда-то все подевались. Возможно, дело в искуственных ограничениях подобных приложений самим Play Market, возможно еще в чем-то.

К счастью, в Android можно установить приложения не только из Play Market. Я нашел на github вот такое простое приложение. Сайт приложения не открывается, но само приложение можно скачать с github и оно прекрасно работает и без сайта.

Приложение имеет максимально простой пользовательский интерфейс и требует для работы всего три параметра - ключ робота, ID канала и номер телефона.

Ключ робота выдается служебным роботом @BotFather, этот робот создает токены авторизации для всех остальных роботов в Telegram.

С ID канала интереснее. С роботами в Telegrаm можно работать напрямую а можно добавить робота в свою группу и взаимодействовать с ним оттуда. В данном случае подразумевается именно второй вариант.

Создаем новую группу в Telegram, добавляем в нее помимо себя, только что созданного робота. Чтобы узнать ID чата нужно кратковременно добавить в чат еще одного робота @RawDataBot - этот робот покажет нам ID чата которое и нужно использовать при настройке приложения. После того как мы узнали id чата робота @RawDataBot можно из чата удалить.

В качестве номера телефона я указал свой основной телефон.

Если все настроено правильно все новые SMS сообщения начнут приходить в созданный Telegram чат.

 

Оставить комментарий

 
  2022-01-19

Назойливая карусель обоев в телефонах Xiaomi Mi

Телефон обновил что-то у себя в прошивке, после чего на экране блокировки вместо скучного изображения, которое я туда поставил стали показываться веселые картинки с забавными фактами. Может для кого-то оно так и нужно, но меня это дико бесило. Один раз я уже эту порнографию отключил, но совершенно забыл как. Отдельно бесит что, пока найдешь как это отключить - испортишь не одну настройку и затем ищешь как включить ее обратно.

В конце концов нашел как это отключить - идем в Settings, выбираем "Always On Display & Lock Screen" находим раздел "Wallpaper Carousel" заходим туда и вырубаем ее к чертям.

Вырубить просто так сразу не получится - сначала приложение предложит вместо выключения функционала использовать собственные фото - не ведемся на развод, отказываемся. Затем приложение попросит дать фидбек, что именно не понравилось - вежливо отвечаем, или невежливо посылаем.

После вышепроделанного оказывается что карусель все еще на месте! Не нужно отчаиваться! Идем в настройки обоев и еще раз устанавливаем фоновое изображение на экран телефона.

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

 

Оставить комментарий

 
  2021-12-19

Бесконечное Лето

Есть такой жанр - визуальная новелла. Визуальная новелла это слияние компьютерной игры, комикса и новеллы. Этакий нелинейный комикс, где развитие сюжета зависит от выбора читателя. Прохождение-чтение сопровождается фоновой музыкой, что вызывает эффект погружения.

Из визуальных новелл мне в свое время очень зашла Бесконечно Лето - у ребенка в кружке ребята сильно фанатели от этой штуки, вот мне и стало любопытно, что это за штука такая, и, что интересно, штука действительно забавная, жаль в моем детстве таких не было...

Главный герой загадочным образом переносится из нашего времени в альтернативное советское прошлое, в пионер-лагерь "Совенок", где, в теле подростка, оказывается вовлеченным с странные приключения.

Интересно что у Бесконечного лета есть адаптация в виде Telegram Бота так что можно играть в эту штуку не устанавливая никаких программ на устройство, хотя без звукового сопровождения впечатление от игры сильно слабее. Впочем, музыкальное сопровождение, можно взять с их сайта в виде треков, кстати, треки отлично подходят в качестве фонового сопровождения пока что-нибудь кодишь...

 

Оставить комментарий

 
  2021-06-13

Запись звука через микрофонный вход телефона

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

На выходных спаял небольной концепт подобного устройства. Устройство представляет собой простейший резистивный делитель с резисторами 5К и 1К средняя точка которого присоединена к микрофонному входу через керамический конденсатор в 100 пикофарад. Схема соединения получилась такой:

Делитель спаял на куске макетной платы. Для соединения всех компонентов использовал несколько переходников с коннекторами типа тюльпан и джек. 

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

Звук можно записывать только в моно режиме, так что для студийной записи такое не подойдет, а вот для маленького проекта по распознаванию речи, автоматизации телефонных звонков или для автоматических тестов голосовых возможностей андроид приложений - вполне.

 

Оставить комментарий

 
  2021-05-03

Новая версия текстового редактора

Выпустил на выходных новую версию Простого Текстового Редактора. Не прошло и десяти лет как в нем, наконец появились функции отмены и повтора последней операции. Причем новая версия зарелизина в Google Play и F-Droid

На F-Droid версия уже принята но я до сих пор вижу старый релиз, они не быстро обнавляют приложения.

 

Оставить комментарий

 
  2021-03-20

Компилируем Android приложения в Docker

Давно хотел научиться компилировать свои приложения для андроид без необходимости устанавливать и настраивать на компьютере кучи ненужного софта. В самом деле - на дворе двадцать первый век, у нас есть докер и нам совершенно не обязательно для сборки приложения устанавливать весь софт на рабочую станцию чтобы собрать приложение. Это можно сделать в докере. 

Посидев пару вечеров, собрал простенький образ, который будет делать за меня всю черновую работу. Теперь, чтобы собрать любое приложение для android, достаточно выполнить вот такую команду из корня проекта:

docker run --rm -v ${PWD}:/var/app maxistar/android:latest bash \
 -c "gradle build && gradle compileDebugSources"

Готовый apk файл будет сохранен в папку app/build/outputs/apk/debug/app-debug.apk - его можно сразу скопировать не телефон и установить его (не забудьте разрешить установку приложений из неизвестных источников). 

Как был сделан этот образ? За основу взял образ Debian 9.

Установил Java 8 (Java 11 у меня не завелась если знаете как подружить gradle и java 11 поделитесь секретом)

apt-get update
apt-get -y install git wget unzip default-jdk

Для сборки нам нужен gradle установим его

wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -P /tmp
unzip -d /opt/android /tmp/sdk-tools-linux-3859397.zip

Скачаем Android SDK:

wget https://services.gradle.org/distributions/gradle-6.8.3-bin.zip -P /tmp
unzip -d /opt/gradle /tmp/gradle-6.8.3-bin.zip

Еще нужно установить переменные окружения.

ENV ANDROID_SDK_ROOT=/opt/android
ENV GRADLE_HOME=/opt/gradle/gradle-6.8.3
ENV PATH=${GRADLE_HOME}/bin:${ANDROID_SDK_ROOT}/tools/bin:${PATH}

Теперь нужно скачать инструменты для сборки android приложений.

sdkmanager --update
sdkmanager "build-tools;30.0.2" "platform-tools" "platforms;android-30"
sdkmanager --licenses

Готовый Dockerfile выглядит вот так:

FROM debian:9

MAINTAINER Max Starikov <maxim.starikov@gmail.com>

ENV ANDROID_SDK_ROOT=/opt/android
ENV GRADLE_HOME=/opt/gradle/gradle-6.8.3
ENV PATH=${GRADLE_HOME}/bin:${ANDROID_SDK_ROOT}/tools/bin:${PATH}

RUN apt-get update && apt-get -y install git wget unzip default-jdk

RUN wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -P /tmp && \
    unzip -d /opt/android /tmp/sdk-tools-linux-3859397.zip && \
    wget https://services.gradle.org/distributions/gradle-6.8.3-bin.zip -P /tmp && \
    unzip -d /opt/gradle /tmp/gradle-6.8.3-bin.zip && \
    sdkmanager --update && \
    yes | sdkmanager --licenses  && \
    sdkmanager "build-tools;30.0.2" "platform-tools" "platforms;android-30" && \
    yes | sdkmanager --licenses && \
    mkdir /var/app

WORKDIR /var/app

Следует заметить, что образ довольно большой (примерно 850Mb) - и для его использования нужно быстрое интернет соединение, но зато, единожды скачав, скачивать повторно docker его больше не будет.

Образ доступен на docker hub. Исходник находится на github.

 

Оставить комментарий