Android(Java):音量調節

設置音量的方法也很簡單,AudioManager提供了方法:
  publicvoidsetStreamVolume(intstreamType,intindex,intflags)其中streamType有內置的常量,去文檔裏面就可以看到。

JAVA代碼:
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

//通話音量

int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
int current = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
Log.d(“VIOCE_CALL”, “max : ” + max + ” current : ” + current);

//系統音量

max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
Log.d(“SYSTEM”, “max : ” + max + ” current : ” + current);

//鈴聲音量

max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
Log.d(“RING”, “max : ” + max + ” current : ” + current);

//音樂音量

max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
Log.d(“MUSIC”, “max : ” + max + ” current : ” + current);

//提示聲音音量

max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM );
Log.d(“ALARM”, “max : ” + max + ” current : ” + current);
ps:
  遊戲過程中只允許調整多媒體音量,而不允許調整通話音量。
  setVolumeControlStream(AudioManager.STREAM_MUSIC);
  長時間不動,不允許黑屏,View.setKeepScreenOn(true);
  估計manifest文件中需要註冊權限吧

 

a、通過系統服務獲得聲音管理器:

AudioManager audioManager =  (AudioManager)getSystemService(Service.AUDIO_SERVICE);

b、根據實際需要調用適當的方法:(常用方法)

audioManager.adjustStreamVolume(int streamType, int  direction, int flags);

streamType:聲音類型,可取的爲STREAM_VOICE_CALL(打電話時的聲音), STREAM_SYSTEM(Android系統聲音), STREAM_RING(電話鈴響), STREAM_MUSIC(音樂聲音) or STREAM_ALARM(警告聲音)。

direction:調整音量的方向,可取爲ADJUST_LOWER(調低音量), ADJUST_RAISE(調高音量), or ADJUST_SAME(保持先前音量)。

flags:可選標誌位(如要顯示出音量調節UI,使用如下flag:AudioManager.FLAG_SHOW_UI)。

audioManager.setStreamMute(int streamType, boolean state);設置指定聲音類型(streamType)是否爲靜音。如果state爲true,則設置爲靜音;否則,不設置爲靜音。

audioManager.setRingerMode(int ringerMode);

設置鈴音模式,可取值爲RINGER_MODE_NORMAL(鈴音正常模式), RINGER_MODE_SILENT(鈴音靜音模式), or RINGER_MODE_VIBRATE(鈴音震動模式,即鈴音爲靜音,啓動震動)。

audioManager.setMode(int mode);

設置聲音模式,可取值爲MODE_NORMAL(正常模式,即在沒有鈴音與電話的情況), MODE_RINGTONE(鈴響模式), MODE_IN_CALL(接通電話模式) or MODE_IN_COMMUNICATION(通話模式)。

注意:聲音的調節是沒有權限要求的。

 

mSoundProgress = (ProgressBar) v.findViewById(R.id.sound_seekbar);

-----------------------------------------------------------------------------------------------------------------------------------------

<SeekBar
                android:id="@+id/sound_seekbar"
                style="@style/Controller_Sound_SeekBar"

----------------------------------------------------------------

<style name="Controller_Sound_SeekBar">
        <item name="android:minHeight">97dip</item>
        <item name="android:maxHeight">97dip</item>
        <item name="android:progressDrawable">@drawable/controller_sound_seekbar</item>

--------------------------------

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@android:id/background" android:drawable="@drawable/sound_seekbar_1"/>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <solid android:color="#00000000" />
            </shape>
        </clip>
    </item>
    <item>
        <layer-list>
            <item
                android:id="@android:id/progress"
                android:drawable="@drawable/sound_seekbar_2">
            </item>
        </layer-list>
    </item>

</layer-list>

-------------------------------
    </style>

</resources>

----------------------------------------------------------------


                android:layout_width="100dip"
                android:layout_height="40dip"
                android:layout_marginLeft="15dip"
                android:layout_marginTop="35dip"
                android:layout_toRightOf="@id/btn_sound"

                android:thumb="@null"
                android:focusable="true" />

-----------------------------------------------------------------------------------------------------------------------------------------


  if (mSoundProgress != null) {
   int maxVolume = mAM.getStreamMaxVolume(AudioManager.STREAM_MUSIC);//最大音量    
   int currentVolume = mAM.getStreamVolume(AudioManager.STREAM_MUSIC);//當前音量    
   if (mSoundProgress instanceof SeekBar) {
    SeekBar seeker = (SeekBar) mSoundProgress;
    seeker.setOnSeekBarChangeListener(mSoundSeekListener);

------------------------------------------------------------------------------------------------------------------------------------------

private OnSeekBarChangeListener mSoundSeekListener = new OnSeekBarChangeListener() {
  public void onStartTrackingTouch(SeekBar bar) {
  }

  public void onProgressChanged(SeekBar bar, int progress, boolean fromuser) {
   
   mAM.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); //拖動seekbar時改變音量
   if(progress == 0){
    switchSound(true);
    return;
   }
   switchSound(false);
  }

  public void onStopTrackingTouch(SeekBar bar) {
  }
 };

 

------------------------------------------------------------------------------------------------------------------------------------------
   }
   mSoundProgress.setMax(maxVolume);
   mSoundProgress.setProgress(currentVolume);
  }

private View.OnClickListener mSoundListener = new View.OnClickListener() {
  boolean isSilent = false;
  public void onClick(View v) {
   if(isSilent){
    isSilent = false;
    switchSound(false);
    return;
   }
   isSilent = true;
   switchSound(true);
  }
 };

private void switchSound(boolean slient){
  if(slient){
   mSoundButton.setBackgroundResource(R.drawable.btn_sound_clear);
   mAM.setStreamMute(AudioManager.STREAM_MUSIC, true);
   return;
  }
  mSoundButton.setBackgroundResource(R.drawable.btn_sound);
  mAM.setStreamMute(AudioManager.STREAM_MUSIC, false);
 }

 

show:

int currentVolume = mAM.getStreamVolume(AudioManager.STREAM_MUSIC);//當前音量
  mSoundProgress.setProgress(currentVolume);

發佈了51 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章