나는 이것을 하루 동안 고민하고 있었고 문제는 여전히 존재합니다.android 응용 프로그램 음소거 및 음소거 해제 MediaPlayer
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);
}
을 활동 자체가이 두 기능이 잘 작동 내 :
나는 음소거하고 아래와 같이 음소거를 해제 내 활동이 기능을 가지고있다. 그러나 첫 번째 활동에서 음소거 상태이고 다음 활동을 위해 음소거를 해제하려면 활동이 음소거 상태로 유지됩니다. 나는 왜 궁금해하니? 아무도 내게 약간의 조언을 주실 수 있습니까? 고마워요!
업데이트 : 이 코드의 일부입니다
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); }' –
시도해 보았지만 여전히 작동하지 않습니다. 두 기능 모두 첫 번째 작업에서 작동합니다. 그러나 첫 번째 활동에서 음소거 된 경우 다음 활동에서 음소거가되지 않습니다. –
두 번 이상 음소거 할 수 있습니까? 설명서에 볼륨을 반환하기 위해 음소거 한 횟수만큼 음소거를 해제해야한다고 나와 있습니다. http://developer.android.com/reference/android/media/AudioManager.html#setStreamMute(int, boolean) –