6、参数说明:
import android.app.Activity; import android.util.Log; import android.view.Window; import android.widget.SeekBar; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.media.AudioManager; import android.os.Bundle; public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener{//实现滑动条接口以监听滑块改变事件 //声明相关变量 private SeekBar seekbar_ntf; private SeekBar seekbar_ring; private SeekBar seekbar_music; private SeekBar seekbar_alarm; private SeekBar seekbar_call; private AudioManager audioManager; //private VolumeReceiver mVolumeReceiver;//广播相关 //private boolean setVolume;//广播相关,区分是在当前应用还是其他地方设置的音量 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); //获取声音管理服务及初始化seekbar audioManager = (AudioManager)getSystemService(Service.AUDIO_SERVICE); seekbar_ntf = (SeekBar) findViewById(R.id.seekbar_ntf); seekbar_ntf.setOnSeekBarChangeListener(this); seekbar_ring = (SeekBar) findViewById(R.id.seekbar_ring); seekbar_ring.setOnSeekBarChangeListener(this); seekbar_music = (SeekBar) findViewById(R.id.seekbar_music); seekbar_music.setOnSeekBarChangeListener(this); seekbar_alarm = (SeekBar) findViewById(R.id.seekbar_alarm); seekbar_alarm.setOnSeekBarChangeListener(this); seekbar_call = (SeekBar) findViewById(R.id.seekbar_call); seekbar_call.setOnSeekBarChangeListener(this); //获取相关音量并设置seekbar getAndsetVolume(); //setVolume = false;//广播相关 //注册广播 接收器并监听音量变化 //mVolumeReceiver = new VolumeReceiver() ;//广播相关 //IntentFilter filter = new IntentFilter() ;//广播相关 //filter.addAction("android.media.VOLUME_CHANGED_ACTION") ;//广播相关 //registerReceiver(mVolumeReceiver, filter);//广播相关 } ////广播相关,监听音量变化的广播接收器 // private class VolumeReceiver extends BroadcastReceiver{ // @Override // public void onReceive(Context context, Intent intent) { // //若音量发生变化则更改seekbar // if(intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")){ // if(setVolume) {//当前应用设置了音量 // setVolume = false; // } else {//其他地方设置了音量 // getAndsetVolume(); // } // } // } // } //获取相关音量并设置seekbar public void getAndsetVolume() { //通知声音,通知、邮件 int max_ntf = audioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION); int cur_ntf = audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION); //Log.d("demo", "sys_max:"+max_sys +", cur"+cur_sys); seekbar_ntf.setMax(max_ntf); seekbar_ntf.setProgress(cur_ntf); //响铃声音,来电、信息 int max_ring = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING); int cur_ring = audioManager.getStreamVolume(AudioManager.STREAM_RING); //Log.d("demo", "ring_max:"+max_ring +", cur"+cur_ring); seekbar_ring.setMax(max_ring); seekbar_ring.setProgress(cur_ring); //媒体声音 int max_music = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); int cur_music = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); //Log.d("demo", "music_max:"+max_music +", cur"+cur_music); seekbar_music.setMax(max_music); seekbar_music.setProgress(cur_music); //闹钟声音 int max_alarm = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM); int cur_alarm = audioManager.getStreamVolume(AudioManager.STREAM_ALARM); //Log.d("demo", "alarm_max:"+max_alarm +", cur"+cur_alarm); seekbar_alarm.setMax(max_alarm); seekbar_alarm.setProgress(cur_alarm); //通话声音 int max_call = audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL); int cur_call = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL); //Log.d("demo", "call_max:"+max_call +", cur"+cur_call); seekbar_call.setMax(max_call); seekbar_call.setProgress(cur_call); } @Override public void onStopTrackingTouch(SeekBar seekBar) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } //监听seekbar滑块改变事件以调节音量 @Override public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { //Log.d("demo", "seekid:"+seekBar.getId()+", progess"+progress); if(fromUser) {//首先判断是否是用户点击滑块,因为程序初始化时会设置滑块位置 switch(seekBar.getId()) { case R.id.seekbar_ntf:{ int ntf = audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION); if(progress < ntf) {//调小音量 for(int i=0; i<ntf-progress; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_NOTIFICATION, AudioManager.ADJUST_LOWER, AudioManager.FLAG_VIBRATE); } } else if(progress > ntf) {//调大音量 for(int i=0; i<progress-ntf; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_NOTIFICATION, AudioManager.ADJUST_RAISE, AudioManager.FLAG_VIBRATE); } } break; } case R.id.seekbar_ring:{ int ring = audioManager.getStreamVolume(AudioManager.STREAM_RING); if(progress < ring) {//调小音量 for(int i=0; i<ring-progress; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_LOWER, AudioManager.FLAG_VIBRATE); } }else if(progress > ring) {//调大音量 for(int i=0; i<progress-ring; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_RAISE, AudioManager.FLAG_VIBRATE); } } break; } case R.id.seekbar_music:{ int music = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); if(progress < music) {//调小音量 for(int i=0; i<music-progress; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_VIBRATE); } }else if(progress > music) {//调大音量 for(int i=0; i<progress-music; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_VIBRATE); } } break; } case R.id.seekbar_alarm:{ int alarm = audioManager.getStreamVolume(AudioManager.STREAM_ALARM); if(progress < alarm) {//调小音量 for(int i=0; i<alarm-progress; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_ALARM, AudioManager.ADJUST_LOWER, AudioManager.FLAG_VIBRATE); } }else if(progress > alarm) {//调大音量 for(int i=0; i<progress-alarm; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_ALARM, AudioManager.ADJUST_RAISE, AudioManager.FLAG_VIBRATE); } } break; } case R.id.seekbar_call:{ int call = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL); if(progress < call) {//调小音量 for(int i=0; i<call-progress; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL, AudioManager.ADJUST_LOWER, AudioManager.FLAG_VIBRATE); } }else if(progress > call) {//调大音量 for(int i=0; i<progress-call; i++){ //setVolume = true;//广播相关 audioManager.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL, AudioManager.ADJUST_RAISE, AudioManager.FLAG_VIBRATE); } } break; } default: break; } } } // public void onDestoty() { // super.onDestroy(); // ////广播相关,取消注册广播接收器 // unregisterReceiver(mVolumeReceiver); // } }
<activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/MyTheme" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
<resources> <style name="MyTheme"> <!-- 悬浮窗模式 ,没有这句窗口变全屏--> <item name="android:windowIsFloating">true</item> <!-- 窗口外的背景变暗 --> <item name="android:backgroundDimEnabled">true</item> <!-- 背景 --> <item name="android:windowBackground">@drawable/background</item> <!-- 无标题 --> <item name="android:windowNoTitle">true</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> </style> </resources>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <padding android:left="10dp" android:top="20dp" android:right="10dp" android:bottom="20dp" /> <stroke android:width="5dp" android:color="#000000" /> <corners android:radius="30dp" /> <solid android:color="#FFFFFF" /> </shape>
<View android:layout_width="match_parent" android:layout_height="2px" android:background="#666666" />
<SeekBar android:id="@+id/seekbar_call" android:layout_width="fill_parent" android:layout_height="23dip" android:paddingLeft="20dip" android:paddingRight="20dip" android:paddingBottom="3dip" android:thumb="@layout/thumb" />
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按下状态 --> <item android:state_pressed="true" android:drawable="@drawable/thumb_bt" /> <!-- 普通无焦点状态 --> <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/thumb_bt_pressed" /> </selector>