Я хочу имитировать все физические кнопки наших устройств Android.
Итак, есть ли способ смоделировать:
- КНОПКА НАЗАД
- ГЛАВНАЯ КНОПКА
- КНОПКА МЕНЮ
- КНОПКА ПОИСКА
- КНОПКА ЗАДАЧИ
- КНОПКИ ГРОМКОСТИ (+ И -)
Я хочу имитировать все физические кнопки наших устройств Android.
Итак, есть ли способ смоделировать:
Создайте KeyEvent и опубликуйте его.
KeyEvent kdown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
Activity.dispatchKeyEvent(kdown);
KeyEvent kup = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK);
Activity.dispatchKeyEvent(kup);
activity.onBackPressed
между прочим ...
- person Raphael Royer-Rivard; 27.12.2013
Вы можете имитировать нажатие кнопок, даже если ваше приложение закрыто, но вам потребуется разрешение на специальные возможности:
Создать сервис, расширенный из AccessibilityService
:
class ExampleAccessService:AccessibilityService() {
override fun onInterrupt() {
}
override fun onAccessibilityEvent(event: AccessibilityEvent?) {
}
fun doAction(){
performGlobalAction(GLOBAL_ACTION_RECENTS)
// performGlobalAction(GLOBAL_ACTION_BACK)
// performGlobalAction(GLOBAL_ACTION_HOME)
// performGlobalAction(GLOBAL_ACTION_NOTIFICATIONS)
// performGlobalAction(GLOBAL_ACTION_POWER_DIALOG)
// performGlobalAction(GLOBAL_ACTION_QUICK_SETTINGS)
// performGlobalAction(GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN)
}
}
Позвоните doAction()
там, где вы хотите действовать
Добавить к Manifest
:
<application
...
<service
android:name=".ExampleAccessService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:label="Name of servise" // it will be viewed in Settings->Accessibility->Services
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config"/>
</service>
...
</application>
accessibility_service_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackAllMask"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="false"
android:description="your description"
android:notificationTimeout="100"
android:packageNames="your app package, ex: ex: com.example.android"
android:settingsActivity="your settings activity ex: com.example.android.MainActivity" />
для получения дополнительной информации см. https://developer.android.com/guide/topics/ui/accessibility/service
Если вы тестируете определенный компонент своего приложения, такой как Activity
, вы можете использовать InstrumentationTestCase. rel="nofollow">sendKeys()
метод, передавая туда любую комбинацию ключей. Также вы можете использовать TouchUtils
для имитации действий касания, перетаскивания и нажатия.
Моделирование для следующих ключей:
-BACK BUTTON: переопределить onBackPressed() в текущей активности.
-КНОПКА МЕНЮ: вы должны посмотреть здесь, а также openOptionsMenu(), меню
Вам также следует просмотреть этот блог.
Попробуйте использовать метод переопределения android dispatchKeyEvent.
Используйте onKeyListener
для переопределения физических кнопок на вашем устройстве. См. документ.
Класс KeyEvent содержит все значения для физических кнопок и экранной клавиатуры. на вашем устройстве. Например, KeyEvent.KEYCODE_HOME
заменяет кнопку "Домой" на устройстве.
Погуглите, найдете много примеров для KEYCODE
событий
Попробуйте это ваше занятие
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
}
if (keyCode == KeyEvent.KEYCODE_HOME)
{
}
if (keyCode == KeyEvent.KEYCODE_MENU)
{
}
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP)
{
}
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
{
}
}