我构建了一个小应用程序,可以使用该类将音乐流静音/取消静音AudioManager
。
事实上,它一直有效,直到我关闭应用程序。即,我已将流静音,关闭应用程序,重新启动应用程序,并且按钮不再取消流静音。我在网上搜索过,但似乎没有人遇到过这个问题。
这是我的代码:
public class ControlloVolume extends Activity {
ToggleButton tb_mute;
Button btn_mute;
AudioManager mAudioManager;
boolean mute;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_controllo_volume);
tb_mute = (ToggleButton) findViewById(R.id.tb_mute);
btn_mute = (Button) findViewById(R.id.btn_mute);
mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
if(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)==0){
mute = true;
tb_mute.setChecked(mute);
}else{
mute = false;
tb_mute.setChecked(mute);
}
}
public void onButtonClicked(View view){
if(!mute){
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
tb_mute.setChecked(true);
mute = true;
}else{
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, false);
tb_mute.setChecked(false);
mute = false;
}
}
首先,要小心不推荐 http://developer.android.com/reference/android/media/AudioManager.html
为了获得更好的用户体验,应用程序必须取消静音流静音
在 onPause() 中,并在 onResume() 中再次静音(如果适用)。
但我假设你知道自己在做什么,所以我们开始吧。
请注意文档中的这一行设置流静音 http://developer.android.com/reference/android/media/AudioManager.html
静音命令可以防止客户端进程死亡:如果
流上有活动静音请求的进程终止,该流将
自动取消静音。
我检查了我的设备,确实,当我退出活动时,流保持静音。但是一旦我终止该进程,静音就会消失。
看一眼活动生命周期 http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle.
由于您当前的方法无法可靠地工作,您可以编写一个前台服务 http://developer.android.com/guide/components/services.html#Foreground这将触发静音 - 从您的活动中启动该服务。
您还可能需要设置流独奏 http://developer.android.com/reference/android/media/AudioManager.html.
Two 重要的事物。
-
Volume==0
and muted
不是同一件事。 IE。流的音量可以==0,但不能静音。虽然如果流is静音,音量始终为0
- 静音请求是累积的。 IE。如果您设置了静音两次,则还必须取消静音两次 - 您的代码无法处理该问题
作为旁注,对于此类应用程序,您可能希望使用小部件而不是活动。
无关。令人惊讶的是,很多人不太明白布尔值是如何工作的。
当我看到像你这样的常规代码时,这里有一些简化的重写。
@Override
public void onCreate(Bundle savedInstanceState) {
// ... setup just like you did
// boolean is just like any other type. You can assign not only
// constants, but expressions too
mute = (mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)==0);
tb_mute.setChecked(mute);
}
public void onButtonClicked(View view){
mute = !mute; // invert value
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, mute);
tb_mute.setChecked(mute);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)