【问题标题】:mute just the background music of my app仅将我的应用的背景音乐静音
【发布时间】:2018-12-28 23:05:12
【问题描述】:

我构建了一个应用程序,在主菜单中我想创建一个按钮来控制用户是否只想为此应用程序(而不是设备)使用音乐(取消静音)或不(静音)并播放背景音乐在另一个布局上..

这是我调用媒体播放器的方法(在 Question.java 类中):

public void playSound(int arg)
{
    try
    {
        if(player != null)
        {
            if (player.isPlaying()) 
            {
                player.stop();
                player.reset();
                player.release();
            }
        }
    }
    catch(Exception e)
    {

    }

    if (arg == 2)
    {
        player = MediaPlayer.create(this, R.raw.b);
    }

    if(player != null)
    {
        player.setLooping(true);
        player.start();
    }
}   

这是按钮的代码(在我的主菜单 MainActivity.java 中):

public class MainActivity extends Activity
{
  //another code.....
  public String klik;

  protected void onCreate(Bundle savedInstanceState)
  {
    //another code...

    DataAdapter myDbHelper = new DataAdapter(this);
    myDbHelper.createDatabase();       
    myDbHelper.open();      
    Cursor get = myDbHelper.getSound(1);
    klik = Utility.GetColumnValue(get, "klik");
    //to get value of klik on my database

    if(klik.equals("1"))
    {
        setGbrSound(1);
        //set button's background to mute
    }
    else if(klik.equals("2"))
    {
        setGbrSound(2);
        //set button's background to unmute
    }

    myDbHelper.close();

    //another code...

    btnsuara.setOnClickListener(new View.OnClickListener()
    {   
        @Override
        public void onClick(View arg0)
        {
            // TODO Auto-generated method stub
            if(klik.equals("1"))
            {
                AudioManager aManager=(AudioManager)getSystemService(AUDIO_SERVICE);
                aManager.setStreamMute(AudioManager.STREAM_MUSIC, true);        
                setSound(2); //update klik value in database to klik=2
                setGbrSound(2); //set button's background to unmute
                setSound(3); //change value of String klik in this class from the value of klik in database
            }
            else if (klik.equals("2"))
            {
                AudioManager aManager=(AudioManager)getSystemService(AUDIO_SERVICE);
                aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);

                setSound(1); //update klik value in database to klik=1
                setGbrSound(1); //set button's background to mute
                setSound(3); //change value of String klik in this class from the value of klik in database
            }
        }   
    });
}

如果我在 MainActivity.java 中使用此代码,则该功能正常工作(我认为这是因为在此类中没有要播放的媒体播放器)。当 Question.java 类运行时,调用方法 playSound 并播放媒体播放器。当我返回 MainActivity.java 并选择将音乐静音,然后再次转到 Question.java 时,不播放背景音乐,然后禁用设备的媒体音量设置(不仅适用于我的应用程序)。 有谁知道如何解决这个问题?谢谢..

编辑:我尝试使用此代码,但仍然无法取消静音..

    btnsuara.setOnClickListener(new View.OnClickListener()
    {   
        @Override
        public void onClick(View arg0)
        {
            // TODO Auto-generated method stub
            if(isMuted(mContext)==false)
            {
                AudioManager aManager =(AudioManager)getSystemService(AUDIO_SERVICE);
                aManager.setStreamMute(AudioManager.STREAM_MUSIC, true);        

                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
                Editor editor = prefs.edit(); // get an Editor object
                editor.putBoolean("isMuted", true); // set the mute boolean to true (mute)
                editor.commit();

                setGbrSound(2); //set button's background to unmute/sound on
            }
            else if (isMuted(mContext)==true)
            {   
                AudioManager aManager=(AudioManager)getSystemService(AUDIO_SERVICE);
                aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);

                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
                Editor editor = prefs.edit(); // get an Editor object
                editor.putBoolean("isMuted", false); // set the mute boolean to false (unmute)
                editor.commit();

                setGbrSound(1); //set button's background to mute/sound off
            }
        }   
    });

public static boolean isMuted(Context c)
{
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
     return prefs.getBoolean("isMuted", false); // false is the default value 
}

有没有cmets?

【问题讨论】:

  • 这取决于您如何播放背景音乐。愿意发布您的代码吗?
  • @Clay 我已经发布了一些代码和更多关于我的问题的解释......:D

标签: android android-mediaplayer


【解决方案1】:

最快的方法:

1)。将值保存为 boolean 或 int 或 SharedPreferences 中的任何内容

2)。从应用中播放音乐的任何位置检查此值

你已经完成了。询问您是否需要一些示例代码

编辑示例:

在您的菜单Activity 中,将Context 定义为类字段(您已声明所有其他字段):

     private Context mContext = this;

1)。然后(在您的 onClick() 方法中)设置一个布尔值,如:

   SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
   Editor editor = prefs.edit(); // get an Editor object
   editor.putBoolean("isMuted", true); // set the mute boolean to true
   editor.commit(); // save the changes

2)。使用此方法从应用程序中的任何位置执行检查(传递有效的Context)。您可以在要检查“静音”选项是否被激活的 Activity 中定义并调用此方法:

    public static boolean isMuted(Context c){
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
     return prefs.getBoolean("isMuted", false); // false is the default value 
      }

注意,你可以再次使用Editor.commit()方法覆盖这个值

【讨论】:

  • 抱歉,我不太明白这段代码.. :|我应该如何以及在哪里放置此代码?当我单击静音按钮时的第一个?那么第二个呢?第二个代码如何检查它是否被静音?感谢您的解释:D
  • 我对我的示例进行了进一步的更正。第二个代码可以检查这一点,因为 SharedPreferences 对您的应用程序来说是全局的。请参阅此文档以了解其工作原理:developer.android.com/reference/android/content/… 和这个developer.android.com/reference/android/preference/…
  • 我认为这段代码对我的应用程序不是很有用,因为我已经在数据库中构建了指标来了解它是否静音 (klik=1) 和取消静音 (klik=2) ..问题是每当我将应用程序静音时(该选项仅在 MainActivity.java 作为主菜单),然后我使用播放的 MediaPlayer 转到布局(Question.java),然后我回到主菜单菜单并选择取消静音,然后我转到 Question.java,媒体播放器不再播放,因为它仍然被禁用..我认为我的代码没有错误,但它仍然无法取消静音..跨度>
  • 我发现了这个 [stackoverflow.com/questions/7908962/…,据说这是一个错误.. 但我认为应该有办法解决这个问题.. 我不能使用 setVolume(0 ,0) 因为媒体播放器以另一种布局播放,所以如果我使用 setVolume(0,0) 它将被强制关闭.. 有什么建议可以解决这个问题,@Droidman? :D
  • 绝对没有必要使用数据库来检查静音选项是否被激活。尝试使用 SharedPreferences 来执行此操作(并且不要忘记在每次更改设置时更新 isMuted 布尔值)。我的一个应用程序(在设置菜单中)也有一个静音按钮,我的操作方式与上面所说的完全相同。工作正常
猜你喜欢
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
相关资源
最近更新 更多