仅将我的应用程序的背景音乐静音



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

这是我调用媒体播放器的方法(在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时,背景音乐不会播放,然后设备的媒体音量设置被禁用(不仅适用于我的应用程序)。有人知道怎么解决这个问题吗?Thx。。

编辑:我试着使用这个代码,但仍然无法取消静音。。

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 
}

有什么意见吗?

最快的方法:

1) 。将值保存为布尔值或int或SharedPreferences中的任何值

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

你完了。询问您是否需要一些样本代码

EDIT示例:

在菜单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)。您可以在要检查"静音"选项是否已激活的"活动"中定义并调用此方法:

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

请注意,您可以再次使用Editor.commit()方法来覆盖此值

相关内容

最新更新