我正在尝试验证是否将特定的附加功能添加到了 Intent,但是我一直在单元测试 Android 中为 Intent 获取空值。我有以下课程需要测试:
public class TestClass extends SomeNotifier {
private Intent mIntent = new Intent("testintent");
public TestClassConstructor(Context context) {
super(context);
}
@Override
public void notifyChange() {
mIntent.putExtra("Key one", 22);
mIntent.putExtra("Key two", 23);
mIntent.putExtra("Key three", 24);
getContext().sendBroadcast(mIntent);
}
}
Run Code Online (Sandbox Code Playgroud)
测试如下(我也尝试过使用 mockIntent,但结果是一样的,额外的还是空的):
@RunWith(MockitoJUnitRunner.class)
public class TestClassTest {
@Mock
Context mMockContext;
@Test
public void sendBroadcastTest() {
ArgumentCaptor<Intent> argument = ArgumentCaptor.forClass(Intent.class);
TestClass testClassNotifier = new TestClass (mMockContext);
testClassNotifier.notifyChange();
verify(mMockContext).sendBroadcast(argument.capture());
Intent intent = argument.getValue();
//THE INTENT IS NULL
Assert.assertTrue(intent.hasExtra("Key one"));
}
} …Run Code Online (Sandbox Code Playgroud) 即使打开耳机,我仍试图在扬声器上播放声音;但是,如果在后台播放音乐,我希望在耳机上播放音乐,直到播放声音为止。
因此,我正在采取以下步骤:
MODE_COMMUNICATION为AudioManager,以便可以在扬声器上播放声音。 MODE_NORMAL为
AudioManager,以便背景音乐可以继续在耳机上播放。奇怪的是,这取决于设备,在某些设备上可以,但是在Nexus 6P(Huawei)设备上设置后MODE_COMMUNICATION,会延迟3-4秒才能播放声音。如果我没有延迟地播放声音,扬声器和耳机都不会播放。
问题
我怎么知道在播放声音之前要设置多少延迟?我可以附加任何听众,因此可以通知我在设置MODE_COMMUNICATION声音后可以播放吗?
我不想设置延迟,即使没有必要!
解决方案不是将模式设置为类的构造函数(以跳过延迟),因为我需要在特定时刻在扬声器上播放声音!
PS:我正在用播放声音AudioTrack,但是我也尝试了MediaPlayer(设置setAudioStreamType(MODE_IN_COMMUNICATION)),但没有成功,延迟仍然存在!
有什么建议吗?
java android android-mediaplayer audiotrack android-audiomanager