Цитата:
Сообщение от segamitich
Как же все таки настроить запуск приложения по нажатию клавиши на клавиатуре?
|
Насколько показывают мои копания, нельзя. Я даже пробовал переименовывать предустановленные приложения (например, вместо APK
камеры подсовывать APK Яндекс.Карты -- не работает!). Но я уже эту тему прорабатывал неоднократно.
1. Для запуска плеера можно назначить нужную вам клавишу вот так (в файле *.kl):
key 200 HEADSETHOOK
Это на самом деле СТАРТ/СТОП плеера, но если он не запущен, при первом нажатии кнопки система его запустит.
2. Можно написать простенькую прогу, которая переназначит кнопку камеры. Для этого нужно прописать соответствующий интент (что прога собирается делать фотки), а из неё уже запускать то, что нужно. Я бы хотел по нажатию кнопки запускать навигацию. Сам собираюсь написать, руки пока не дошли.
3. И действующее решение. Если девайс достаточно быстрый и у вас есть root, возьмите написанный мною скрипт (сейчас там прописаны USB коды функ. клавиш):
while true # бесконечный цикл
do
s=$(getevent -v0 -c1) # считываем одно событие из всех устройств ввода, -v0 чтобы он не сыпал кучей ненужного мусора
s=$(echo $s | awk '{print $4}') #выделяем код клавиши
case $s in # выполняем нужную команду
0007003f) am start -a android.intent.action.MAIN -c android.intent.category.HOME -n com.maxmpz.audioplayer/.StartupActivity # запускаем PowerAMP
sleep 1
;;
00070040) am start -n ru.yandex.yandexmaps/.MapActivity # Запускаем Яндекс.Карты
sleep 1
;;
0007003d) am start -a android.intent.action.MAIN -c android.intent.category.HOME # переход на главный экран (если кнопка HOME не работает)
sleep 1
;;
00070045) am start -a android.intent.action.MAIN -n com.speedsoftware.rootexplorer/.RootExplorer # (Root explorer)
sleep 1
;;
0007003b) am startservice -a "org.broeuschmeul.android.gps.usb.provider.nmea.in tent.action.START_GPS_PROVIDER" # запускаем USB GPS и Mapcam Droid
sleep 5
am broadcast -a info.mapcam.droid.SERVICE_START
# am start -n info.mapcam.droid/.SpeedometrActivity # другой экран Mapcam Droid, если нужно
sleep 1
;;
esac
done
Рут нужен потому, что в Андроиде нельзя как в Windows просто читать коды клавы если окно данной программы не активно. Сделано это разработчиками для предотвращения кейлоггеров. Единственный способ -- под рутом читать входящий поток и фильтровать оттуда то что нужно.
Нужные вам коды клавиш можете найти просматривая вывод команды
getevent из командной строки.
Команды запуска нужных приложений можно накопать разбирая файл ресурса внутри APK либо просто узнать у разработчика.
Команда
am start запускает приложение из командной строки.
Данный скрипт успешно работает, но если в девайсе мало памяти, ядро со временем его убьёт. В Андроиде чтобы процесс не убивался, его нужно поместить в область уведомлений (строка сверху), но я не разобрался как это сделать.