【问题标题】:mute and unmute the sound of my active application静音和取消静音我的活动应用程序的声音
【发布时间】:2015-02-11 22:02:28
【问题描述】:

我构建了一个应用程序,我想静音和取消静音这个应用程序的声音.. 我发现这段代码可以静音:

    AudioManager aManager=(AudioManager)getSystemService(AUDIO_SERVICE);
    aManager.setStreamMute(AudioManager.STREAM_MUSIC, true);

它将设备的所有声音静音并禁用设备设置声音,而不仅仅是应用程序的声音.. 我发现这段代码可以取消静音:

    AudioManager aManager=(AudioManager)getSystemService(AUDIO_SERVICE);
    aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);

当我将声音静音并单击包含此代码的按钮时,此代码未运行,并且我的设备的声音设置仍处于禁用状态.. 我只想静音和取消静音我的应用程序的声音,而不是我的设备。任何更正?

【问题讨论】:

  • 根据目前的信息,我无法确定问题的根源。但是,在文档中指出The mute requests for a given stream are cumulative: the AudioManager can receive several mute requests from one or more clients and the stream will be unmuted only when the same number of unmute requests are received.。目前,我只能猜测您可能调用了代码来静音而不是取消静音。
  • 除此之外,我只能建议为您的应用使用全局音量修饰符,例如float volModifier = 1.0f,并与playSoundEffect(effectType, volume*volModifer) 结合使用。设置volModifier = 0.0f,如果它是“静音”,或者根本不播放声音。
  • 我认为您对静音代码和取消静音代码的数量是正确的。但是我不太了解 volModifier,您能否在回答中解释更多有关此代码的信息?那么我可以接受你的回答:D
  • @AndrewT。我使用 MediaPlayer.setVolume(0,0) 静音和 MediaPlayer.setVolume(1,1) 取消静音,但它强制应用程序关闭..
  • 那个代码没有错误..我只是把这个静音和取消静音按钮放在我的MainActivity中,我的错是将默认按钮设置为静音,所以如果我已经按下静音,它自动更改为取消静音按钮,如果我移动到另一个布局并返回 MainActivity,该按钮仍然是静音按钮,所以条件是我点击了两次静音按钮和一次取消静音按钮.. 我可以创建一个条件来检查如果 AudioManager 是否静音,那么如果它被静音,我可以显示取消静音按钮吗? :D

标签: android audio


【解决方案1】:

试试这个代码:

import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
Button play, mute, data, max;
private boolean VolIsMute;
AudioManager manager;
int currentVolume;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    VolIsMute = false;
    init();
}
public void isMute() {
    if (VolIsMute) {
        manager.setStreamMute(AudioManager.STREAM_MUSIC, false);
        VolIsMute = false;
    } else {
        manager.setStreamMute(AudioManager.STREAM_MUSIC, true);
        VolIsMute = true;
    }
}
public void init() {
    max = (Button) findViewById(R.id.max);
    play = (Button) findViewById(R.id.start);
    mute = (Button) findViewById(R.id.mute);
    play.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                MediaPlayer mp = MediaPlayer.create(
                        getApplicationContext(), R.raw.abc);
                mp.start();
            } catch (NullPointerException e) {
                e.printStackTrace();
                Log.d("WTF", "error: " + e);
            }

        }
    });
}
public void mute(View view) {
    currentVolume = manager.getStreamVolume(AudioManager.STREAM_MUSIC);
    if (currentVolume == 0) {
        Toast.makeText(getApplicationContext(),
                " Volume is " + currentVolume +"Press unmute", Toast.LENGTH_SHORT).show();
    } else {
        isMute();
    }
}
public void checvol(View view) {

    currentVolume = manager.getStreamVolume(AudioManager.STREAM_MUSIC);
    if (currentVolume != 0) {
        Toast.makeText(getApplicationContext(),
                "Press unmute", Toast.LENGTH_SHORT).show();
    } else {
        isMute();
    }
}
}

我使用了两个按钮,一个用于静音,另一个用于取消静音。 首先检查当前音量,然后使用 if -else 进行适当的操作。

对于简化这个的人,不要忘记发布代码。

【讨论】:

    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多