Android Exerciser Monkey начинает воспроизводить аудио файлы в случайном порядке - PullRequest
11 голосов
/ 27 июля 2011

Я запускаю тренажер обезьяны, чтобы проверить мое приложение для Android. Как часть моего приложения я играю мультимедийные файлы, которые дают произношение слова. Я поместил файлы в каталог, где они не читаются музыкальным проигрывателем Android. Тем не менее, обезьяна-тренажер генерирует некоторую последовательность событий, которая, кажется, активирует музыкальный проигрыватель, который затем воспроизводит начало другого mp3-файла (который не из моего приложения) во время его тестирования. Как это происходит, и это то, что я должен беспокоиться?

Дополнительная информация: даже когда я отключаю MediaPlayer в своем приложении, проблема все еще возникает. Итак, вот серия выходов от обезьяны спортсмена, ведущей к команде (последней), которая генерирует звук:

   // 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 android.media.AudioManager@40518af0com.android.music.MediaPlaybackService$3@405218f8
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

Ответы [ 2 ]

7 голосов
/ 27 октября 2011

Я думаю, что это связано с тем фактом, что обезьяна посылает различные коды ключей , включая коды ключей для аппаратных ключей, которые могут даже не существовать на тестируемом устройстве .

Я испыталаналогичная проблема с использованием обезьяны и исследование ее путем предоставления опций -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», которая успешно остановила его, начиная сe media player.

Я не знаю, может ли это быть другой код ключа в вашем случае, поэтому вам, возможно, придется поэкспериментировать, и это может не соответствовать вашим целям при использовании обезьяны, чтобы отключить все основныенавигационные события, установив --pct-nav 0.

0 голосов
/ 27 июля 2011

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

...