【发布时间】:2012-06-06 19:13:47
【问题描述】:
我为此苦苦挣扎了一天,但问题仍然存在。
我的活动中有 2 个功能,即静音和取消静音,如下所示:
private void mute() {
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamMute(AudioManager.STREAM_MUSIC, true);
}
public void unmute() {
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
am.setStreamMute(AudioManager.STREAM_MUSIC, false);
}
在活动本身内,这 2 个功能可以正常工作。但是,当它在第一个活动中静音并且我想为下一个活动取消静音时,该活动保持静音。我想知道为什么?谁能给我一些建议?非常感谢!
更新: 这是代码的一部分:
ImagePlay.setOnClickListener(new View.OnClickListener()
{
// Perform button logic
@Override
public void onClick(View v)
{
unmute();
onResume();
Speaker = (ImageView)findViewById(R.id.ImageSpeaker);
Speaker.setImageBitmap(mAudioImageArray[0]);
closeDialog.dismiss();
play(DOSParseActivity.this,introAudioPath);
isMute = false;
}
});
ImageMute.setOnClickListener(new View.OnClickListener()
{
// Perform button logic
@Override
public void onClick(View v)
{
Speaker = (ImageView)findViewById(R.id.ImageSpeaker);
Speaker.setImageBitmap(mAudioImageArray[1]);
closeDialog.dismiss();
mute();
onPause();
isMute = true;
}
});
ImageStop.setOnClickListener(new View.OnClickListener()
{
// Perform button logic
@Override
public void onClick(View v)
{
Speaker = (ImageView)findViewById(R.id.ImageSpeaker);
Speaker.setImageBitmap(mAudioImageArray[2]);
closeDialog.dismiss();
stop();
isMute = false;
}
});
/////////////////////////////////////Navigation Button////////////////////////////
imageNext = new ImageButton(this);
InputStream toNextInput = mngr.open(toNextImage);
final Bitmap bitmaptoNext = BitmapFactory.decodeStream(toNextInput);
imageNext = (ImageButton)findViewById(R.id.ImageNext);
imageNext.setImageBitmap(bitmaptoNext);
imageNext.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
stop();
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmaptoNext, 54, 54, true);
imageNext.setImageBitmap(resizedBitmap);
Intent intent = new Intent(v.getContext(), Characteristic.class);
intent.putExtra("checkMute", "mute" );
intent.putExtra("languageSelection", languageSelected );
startActivity(intent);
}
});
private void play(Context context, String file) {
try {
if (IntroPlayer == null)
{
this.IntroPlayer = new MediaPlayer();
}
else
{
IntroPlayer.stop();
IntroPlayer.reset();
}
AssetFileDescriptor afd = context.getAssets().openFd(file);
IntroPlayer.setDataSource(
afd.getFileDescriptor(),
afd.getStartOffset(),
afd.getLength()
);
afd.close();
IntroPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
IntroPlayer.setOnPreparedListener(this);
IntroPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onSwipe(int direction) {
Intent intent = new Intent();
switch (direction) {
case SimpleGestureFilter.SWIPE_RIGHT :
if (IntroPlayer != null)
{
stop();
}
intent.setClass(this,LocalizationAppActivity.class);
intent.putExtra("languageSelection", languageSelected );
break;
case SimpleGestureFilter.SWIPE_LEFT :
if (IntroPlayer != null)
{
stop();
}
intent.setClass(this,Characteristic.class);
intent.putExtra("languageSelection", languageSelected );
break;
}
startActivity(intent);
}
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();
}
private void stop() {
IntroPlayer.stop();
}
private void mute() {
am.setStreamMute(AudioManager.STREAM_MUSIC, true);
}
public void unmute() {
int maxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
am.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);
am.setStreamMute(AudioManager.STREAM_MUSIC, false);
}
@Override
public void onDestroy() {
super.onDestroy();
stop();
}
【问题讨论】:
-
尝试在方法之外设置对象“am”,即
AudioManager am(AudioManager)getSystemService(Context.AUDIO_SERVICE); private void mute(){ am.setStreamMute(AudioManager.STREAM_MUSIC, true); } private void unMute(){ am.setStreamMute(AudioManager.STREAM_MUSIC, false); } -
我试过了,但还是不行。这两个功能都在第一个活动中起作用。但是当它在第一个活动中静音时,它不能在下一个活动中取消静音。
-
您可以多次静音吗?该文档建议您需要取消静音的次数与静音的次数相同:developer.android.com/reference/android/media/…, boolean)
-
我不认为你可以在 Android 中“超越”这样的活动。您需要知道它是否已静音,然后反转静音。所以也许“翻转”方法会更合适。不管是什么状态,反转它。您可以设置一个“静音状态”变量,并在用户进入下一个活动时将其作为意图数据对象发送。或者,正如@parag 所写的那样,一堂课可能是最好的。
-
我更新了部分代码。你能帮我检查一下吗?谢谢。
标签: android android-activity media-player mute