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

Есть ли в вашем приложении какие-либо функции, запускающие другие сервисы или приложения, которые воспроизводят музыку? Например, если у вас есть кнопка, которая запускает намерение изменить громкость звонка, обезьяна будет нажимать кнопку, вызывающую шум звонка. (По моему опыту обезьяна с настройками по умолчанию выходит за пределы приложения и в любом случае меняет настройки звонка)