2012-06-06 5 views
2

나는 이것을 하루 동안 고민하고 있었고 문제는 여전히 존재합니다.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(); 


} 
+1

메서드 외부에서 "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); }' –

+0

시도해 보았지만 여전히 작동하지 않습니다. 두 기능 모두 첫 번째 작업에서 작동합니다. 그러나 첫 번째 활동에서 음소거 된 경우 다음 활동에서 음소거가되지 않습니다. –

+1

두 번 이상 음소거 할 수 있습니까? 설명서에 볼륨을 반환하기 위해 음소거 한 횟수만큼 음소거를 해제해야한다고 나와 있습니다. http://developer.android.com/reference/android/media/AudioManager.html#setStreamMute(int, boolean) –

답변

4

public static AudioManager am을 가지고; 하나는 Global.java이고 u는 속성을 사용하고 설정할 수 있습니다.

private void mute() { 
    Global.am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    am.setStreamMute(AudioManager.STREAM_MUSIC, true); 
} 

public void unmute() { 
     Global.am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
     am.setStreamMute(AudioManager.STREAM_MUSIC, false); 
    } 
+0

도움 주셔서 감사합니다. 그러나 나는 프로그래밍에 완전히 새로운입니다. global.class를 만드는 방법을 알 수 있습니까? –

+0

죄송합니다. 내 대답을 업데이트했습니다. global.java는 간단한 자바 클래스 –

+0

이지만 아직 작동하지 않습니다. 음소거 해제는 다음 활동을 위해 작동하지 않습니다. –