Android Exerciser Monkey начинает произвольно воспроизводить аудиофайлы
Я запускаю обезьяну-тренажер для тестирования моего приложения для Android. В рамках моего приложения я воспроизвожу медиафайлы, которые дают произношение слов. Я поместил файлы в каталог, где они не читаются игроком Android Music. Тем не менее, обезьяна-тренажер выбрасывает некоторую последовательность событий, которые, похоже, активируют музыкальный плеер, который затем повторно воспроизводит начало другого mp3 файла (который не из моего приложения) во время его тестирования. Как это делается, и это то, о чем я должен беспокоиться?
Дополнительная информация: даже когда я отключил MediaPlayer в своем приложении, проблема все еще возникает. FWIW, вот серия выходов от обезьяны-тренажера, ведущая к команде (последняя), которая генерирует звук:
// Rejecting start of Intent { act=android.intent.action.VIEW dat=http://www.myurl.com/ cmp=com.android.browser/.BrowserActivity } in package com.android.browser
:Sending Pointer ACTION_DOWN x=437.0 y=183.0
:Sending Pointer ACTION_UP x=450.0 y=158.0
:Sending Pointer ACTION_DOWN x=5.0 y=58.0
:Sending Pointer ACTION_UP x=-4.0 y=58.0
:Sending Pointer ACTION_MOVE x=2.0 y=-2.0 <=== sound generated from this one
Это результат logcat в точке проблемы:
I/AudioService( 101): AudioFocus requestAudioFocus() from [email protected][email protected]
I/AudioService( 101): Remote Control registerMediaButtonEventReceiver() for ComponentInfo{com.google.android.music/com.android.music.MediaButtonIntentReceiver}
W/AudioFlinger( 68): write blocked for 159 msecs, 26 delayed writes, thread 0xea00
D/AudioHardwareQSD( 68): AudioHardware pcm playback is going to standby.
D/dalvikvm( 319): GC_EXPLICIT freed 7K, 51% free 2839K/5767K, external 1625K/2137K, paused 74ms
Ответы
Ответ 1
Я думаю, что это связано с тем, что обезьяна отправляет различные коды клавиш , включая коды клавиш для аппаратных клавиш, которые могут даже не существовать на тестируемом устройстве.
Я столкнулся с аналогичной проблемой с помощью обезьяны и исследовал ее, предоставив опции -v -v (повторный -v увеличивает уровень отладки) и замедляя скорость вниз с помощью опции -throttle, которую я также экспериментировал, чтобы найти небольшое количество действий, которые сделали это.
Моя командная строка закончила чтение:
adb shell monkey -p package.undertest.com -s 214765 --throttle 500 -v -v 130
Это показало, что перед запуском медиаплеера я получил следующее сообщение:
Sleeping for 500 milliseconds
:SendKey (ACTION_DOWN): 90 // KEYCODE_FORWARD
:SendKey (ACTION_UP): 90 // KEYCODE_FORWARD
Затем я смог подтвердить, что KEYCODE_FORWARD запускает мой медиаплеер (doubleTwist) на моей Galaxy S, вызывая следующую команду после того, как остановил медиаплеер:
adb shell input keyevent 90
Обратите внимание, что 90 - это ключевой код, указанный в журнале выше.
Изменив мою командную строку на обезьяну, добавьте "--pct-nav 0", которая успешно остановила ее, начиная с медиаплеера.
Я не знаю, может ли это быть другим key code в вашем случае, поэтому вам может потребоваться поэкспериментировать, и, возможно, это не подходит для использования обезьяной, чтобы отключить все основные события навигации, установив - pct-nav 0.
Ответ 2
Есть ли в вашем приложении какие-либо функции, запускающие другие сервисы или приложения, которые воспроизводят музыку? Например, если у вас есть кнопка, которая запускает намерение изменить громкость звонка, обезьяна будет нажимать кнопку, вызывающую шум звонка. (По моему опыту обезьяна с настройками по умолчанию выходит за пределы приложения и в любом случае меняет настройки звонка)