2015年4月27日 星期一

Android Set Volume Switch SeekBar 設定 音量 大小 開關

app中設定音樂開關與大小相關設定,不影響原手機音樂大小設定的方法。
1.AndroidManifest.xml版本設定為
android:minSdkVersion="14"
switch元件需要版本14以上
2./res/layout/activity_main.xml



    
    

    
    

    
    

    
    

    
    

    
    

    
    

    
    

    
    

    
    

    
    

    
    

    
    


2.MainActivity.java
package tw.android;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.Switch;
import android.widget.TextView;

public class MainActivity extends Activity {
 private Switch switchVolume; // 開關

 private SeekBar mediaVlmSeekBar = null; // 音樂、影片、遊戲及其他媒體

 private SeekBar ringerVlmSeekBar = null; // 鈴聲

 private SeekBar alarmVlmSeekBar = null; // 鬧鐘

 private SeekBar notifyVlmSeekBar = null; // 通知

 private AudioManager audioManager = null;

 private TextView tv1, tv2, tv3, tv4;

 private boolean setSwitch;
 private int originalMedia, originalRinger, originalAlarm, originalNotify,
   setMedia, setRinger, setAlarm, setNotify;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  /* 權限 */
  this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
  this.setVolumeControlStream(AudioManager.STREAM_RING);
  this.setVolumeControlStream(AudioManager.STREAM_ALARM);
  this.setVolumeControlStream(AudioManager.STREAM_NOTIFICATION);

  setContentView(R.layout.activity_main);

  initControls();
 }

 @SuppressLint("InlinedApi")
 private void initControls() {
  // Return the handle to a system-level service - 'AUDIO'.
  audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
  /* 手機原設定音量大小 */
  originalMedia = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
  originalRinger = audioManager.getStreamVolume(AudioManager.STREAM_RING);
  originalAlarm = audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
  originalNotify = audioManager
    .getStreamVolume(AudioManager.STREAM_NOTIFICATION);

  // 取出最後設定音量大小
  try {
   SharedPreferences preferencesGet = getApplicationContext()
     .getSharedPreferences("vol",
       android.content.Context.MODE_PRIVATE);
   setSwitch = preferencesGet.getBoolean("setSwitch", false);// 預設開關為關閉
   setMedia = preferencesGet.getInt("setMedia", originalMedia); // 預設音量大小
   setRinger = preferencesGet.getInt("setRinger", originalRinger);
   setAlarm = preferencesGet.getInt("setAlarm", originalAlarm);
   setNotify = preferencesGet.getInt("setNotify", originalNotify);

   Log.i("setSwitch", setSwitch + "");
   Log.i("setMedia", setMedia + "");
   Log.i("setRinger", setRinger + "");
   Log.i("setAlarm", setAlarm + "");
   Log.i("setNotify", setNotify + "");
  } catch (Exception e) {
  }

  /* 開關 */
  switchVolume = (Switch) findViewById(R.id.switchVolume);
  switchVolume.setChecked(setSwitch); // 預設開關為關閉

  /* 音樂、影片、遊戲及其他媒體 */
  mediaVlmSeekBar = (SeekBar) findViewById(R.id.seekBar1);
  tv1 = (TextView) findViewById(R.id.tv1);
  mediaVlmSeekBar.setMax(audioManager
    .getStreamMaxVolume(AudioManager.STREAM_MUSIC)); // 最大值

  /* 鈴聲 */
  ringerVlmSeekBar = (SeekBar) findViewById(R.id.seekBar2);
  tv2 = (TextView) findViewById(R.id.tv2);
  ringerVlmSeekBar.setMax(audioManager
    .getStreamMaxVolume(AudioManager.STREAM_RING));

  /* 鬧鐘 */
  alarmVlmSeekBar = (SeekBar) findViewById(R.id.seekBar3);
  tv3 = (TextView) findViewById(R.id.tv3);
  alarmVlmSeekBar.setMax(audioManager
    .getStreamMaxVolume(AudioManager.STREAM_ALARM));

  /* 通知 */
  notifyVlmSeekBar = (SeekBar) findViewById(R.id.seekBar4);
  tv4 = (TextView) findViewById(R.id.tv4);
  notifyVlmSeekBar.setMax(audioManager
    .getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION));

  /* 設定音量大小 */
  mediaVlmSeekBar.setProgress(setMedia);
  ringerVlmSeekBar.setProgress(setRinger);
  alarmVlmSeekBar.setProgress(setAlarm);
  notifyVlmSeekBar.setProgress(setNotify);

  /* 開關動作 */
  if (setSwitch) {
   tv1.setText(audioManager
     .getStreamMaxVolume(AudioManager.STREAM_MUSIC) + "");// 顯示大小
  } else {
   tv1.setText("0");// 顯示大小
  }

  switchVolume.setOnCheckedChangeListener(new OnCheckedChangeListener() {

   public void onCheckedChanged(CompoundButton buttonView,
     boolean isChecked) {

    if (isChecked) { // 開啟
     mediaVlmSeekBar.setProgress(audioManager
       .getStreamMaxVolume(AudioManager.STREAM_MUSIC)); // 設到最大
     setMedia = audioManager
       .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
     setSwitch = true;
    } else { // 關閉
     mediaVlmSeekBar.setProgress(0); // 設到最小
     setMedia = 0;
     setSwitch = false;
    }

   }
  });

  try {
   /* 音樂、影片、遊戲及其他媒體 */
   mediaVlmSeekBar
     .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
      // seekbar停止時動作
      public void onStopTrackingTouch(SeekBar arg0) {
      }

      // seekbar開始前時動作
      public void onStartTrackingTouch(SeekBar arg0) {
      }

      // seekbar改變時動作
      public void onProgressChanged(SeekBar arg0,
        int progress, boolean arg2) {
       tv1.setText(progress + "");// 顯示大小
       audioManager.setStreamVolume(
         AudioManager.STREAM_MUSIC, progress, 0);
       setMedia = progress; // 修改預設值為選定大小
      }
     });

   /* 鈴聲 */
   ringerVlmSeekBar
     .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
      public void onStopTrackingTouch(SeekBar arg0) {
      }

      public void onStartTrackingTouch(SeekBar arg0) {
      }

      public void onProgressChanged(SeekBar arg0,
        int progress, boolean arg2) {
       tv2.setText(progress + "");// 顯示大小
       audioManager.setStreamVolume(
         AudioManager.STREAM_RING, progress, 0);
       setRinger = progress; // 修改預設值為選定大小
      }
     });

   /* 鬧鐘 */
   alarmVlmSeekBar
     .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
      public void onStopTrackingTouch(SeekBar arg0) {
      }

      public void onStartTrackingTouch(SeekBar arg0) {
      }

      public void onProgressChanged(SeekBar arg0,
        int progress, boolean arg2) {
       tv3.setText(progress + "");// 顯示大小
       audioManager.setStreamVolume(
         AudioManager.STREAM_ALARM, progress, 0);
       setAlarm = progress; // 修改預設值為選定大小
      }
     });

   /* 通知 */
   notifyVlmSeekBar
     .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
      public void onStopTrackingTouch(SeekBar arg0) {
      }

      public void onStartTrackingTouch(SeekBar arg0) {
      }

      public void onProgressChanged(SeekBar arg0,
        int progress, boolean arg2) {
       tv4.setText(progress + "");// 顯示大小
       audioManager.setStreamVolume(
         AudioManager.STREAM_NOTIFICATION, progress,
         0);
       setNotify = progress; // 修改預設值為選定大小
      }
     });
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /* 結束時 */
 @Override
 protected void onDestroy() {
  super.onDestroy();
  /* 紀錄設定音量大小 */
  SharedPreferences preferencesSave = getApplicationContext()
    .getSharedPreferences("vol",
      android.content.Context.MODE_PRIVATE);
  SharedPreferences.Editor editor = preferencesSave.edit();
  editor.putBoolean("setSwitch", setSwitch);
  editor.putInt("setMedia", setMedia);
  editor.putInt("setRinger", setRinger);
  editor.putInt("setAlarm", setAlarm);
  editor.putInt("setNotify", setNotify);
  editor.commit();
  /* 還原手機原設定音量大小 */
  audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalMedia,
    0);
  audioManager.setStreamVolume(AudioManager.STREAM_RING, originalRinger,
    0);
  audioManager.setStreamVolume(AudioManager.STREAM_ALARM, originalAlarm,
    0);
  audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION,
    originalNotify, 0);
  Log.i("onDestroy", "onDestroy");
 }

}

檔案下載:
https://github.com/terryyamg/seekBarVolumeTest
參考連結:
http://programmerguru.com/android-tutorial/android-seekbar-example/
http://www.mysamplecode.com/2013/04/android-switch-button-example.html

沒有留言 :

張貼留言