java - 听起来不行吗? (仍然需要一个答案)

标签 java android multithreading audio service

我的音频没有播放...我已经坚持了大约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正在执行应做的事情:

enter image description here

我现在很拼命,因此,我非常感谢任何反馈(否定或肯定!)

非常感谢,
{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,而不是实例!所以基本上,我正在讽刺我从未存储过的东西,这就是为什么音频没有播放的原因!

关于java - 听起来不行吗? (仍然需要一个答案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33589944/

相关文章:

java - 需要根据黑名单解析日志文件

java - android shared element transition start transition有延迟

java - 使用 JPA 语法时,具有复杂键类的 JpaRepository 验证失败,错误为 "Validation failed for query for method"

php - Android/PHP - JSONParser 无法将网页内容作为 JsonObject 获取

android - 关注图像比例的性能开销

c# - 具有 volatile 或锁定的属性

java - 两个线程同时执行同步块(synchronized block)

python - 同时进行线程和初始化(它是如何工作的?)

java - 即使我声明了 Android 权限也不起作用

android - CollapsingToolbarLayout 不显示标题