我的音频没有播放...我已经坚持了大约7个小时(全天!),无法解决问题。我试图在用户单击静音时使音量静音,而在用户再次单击时取消静音。
我希望能够使用户将应用程序取消静音,使其与用户最初使用的音量相同。 userVolumeOnStart.userVolume
是用户原始音量的存储位置。我在unMute中使用此值,将其音量设置为以前的音量。
例如:
如果您的音量为7,并且使用了我的静音按钮:
打开应用程序->静音(音量= 0)->取消静音(音量= 7),等等。
这是静音按钮的监听器:
public void mute(View view) {
mutebutton = (ImageButton) findViewById(R.id.mutebutton);
if ((variableForMute.x % 2) != 0) { //If it's odd UNMUTE
Log.v(TAG, "Use this volume to unmute " +userVolumeOnStart.userVolume +"");
Toast.makeText(Main_Menu.this, "UNMUTED", Toast.LENGTH_SHORT).show();
mAudioManager.setStreamVolume(AudioManager.STREAM_RING, userVolumeOnStart.userVolume, 0);
variableForMute.x++;
} else { //If its even MUTE
userVolumeOnStart.userVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
Log.v(TAG, "Right Before Mute " +userVolumeOnStart.userVolume +"");
mAudioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);
Toast.makeText(Main_Menu.this, "MUTED", Toast.LENGTH_SHORT).show();
variableForMute.x++;
}
}
userVolumeOnStart.userVolume是我在单独的类中定义的变量,用于全局使用。这是音频实际运行的地方。我可以向您保证,问题不在这里(因为我今天没有弄乱此类中的代码),但是无论如何我还是会提供代码:
cdt = new CountDownTimer(20000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
Log.v(TAG, millisUntilFinished + "left");
millisUntilFinishedRounded = ((500 + millisUntilFinished) / 1000) * 1000;
if (millisUntilFinishedRounded == 10000) { //TEN SECONDS
ten = MediaPlayer.create(TwentySeconds.this, R.raw.tenmoreseconds);
ten.start();
}
if (millisUntilFinishedRounded == 3000) {
three = MediaPlayer.create(TwentySeconds.this, R.raw.threetwoone);
three.start();
}
}
该服务在应用启动时在后台运行。
这是我在应用程序运行时更改手机铃声音量并按下静音按钮后的日志。它显示userVolumeOnStart.userVolume正在执行应做的事情:
我现在很拼命,因此,我非常感谢任何反馈(否定或肯定!)
非常感谢,
{Rich}
顺便说一句,我的问题不是The audio volume is zero?的重复项。 自该问题以来,我已更改了音频流,并找出了那里的问题。那里
AudioManager.STREAM_MUSIC
出现问题,其中userVolumeOnStart.userVolume
始终为0。我将STRAM_MUSIC更改为STREAM_RING。现在这不是问题,因为userVolumeOnStart.userVolume
成功根据用户数量更改了。 现在是问题是,由于未知原因,媒体播放器无法有效工作。 最佳答案
2天后我找到答案了!
MediaPlayer mp = MediaPlayer.create(this, R.raw.MYAUDIO);
我不应该将其分解为声明和实例化:
Mp.create将调用静态方法,该方法是不会存储的实例。当我调用start()时,我正在启动原始的MediaPlayer,而不是实例!所以基本上,我正在讽刺我从未存储过的东西,这就是为什么音频没有播放的原因!