Показать сообщение отдельно
Старый 23.05.2013, 12:03   #8
AngelOfGrief
Старший Пользователь
 
Регистрация: 17.01.2009
Возраст: 48
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
AngelOfGrief is a jewel in the roughAngelOfGrief is a jewel in the roughAngelOfGrief is a jewel in the rough
По умолчанию

Цитата:
Сообщение от 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 запускает приложение из командной строки.

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