最近写了一个AudioDemo 可实现音量增减,音量拖动,滚动条随音量增减实时改变。
具体实现代码如下:
import android.app.Activity;
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;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Toast;
public class MainActivity extends Activity{
Button up,down;
SeekBar audio;
AudioManager audioManager;
VolumeReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
up=findViewById(R.id.up);
down=findViewById(R.id.down);
audio=findViewById(R.id.audio);
receiver = new VolumeReceiver();
IntentFilter filter = new IntentFilter() ;
filter.addAction("android.media.VOLUME_CHANGED_ACTION") ;
registerReceiver(receiver, filter) ;
audioManager=(AudioManager)getSystemService(Service.AUDIO_SERVICE);
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
up.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
audioManager.adjustVolume(AudioManager.ADJUST_RAISE,0);
int i=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
Log.e("cx","up:"+i);
// Toast.makeText(MainActivity.this,"音量增加了,当前音量为:"+i,Toast.LENGTH_SHORT).show();
}
});
down.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
audioManager.adjustVolume(AudioManager.ADJUST_LOWER,0);
int i=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
Log.e("cx","down:"+i);
// Toast.makeText(MainActivity.this,"音量减少了,当前音量为:"+i,Toast.LENGTH_SHORT).show();
}
});
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //获取系统最大音量
audio.setMax(maxVolume); //拖动条最高值与系统最大声匹配
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); //获取当前值
audio.setProgress(currentVolume);
audio.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); //获取当前值
audio.setProgress(currentVolume);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
private class VolumeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")){
int currentVolume =audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
audio.setProgress(currentVolume);
}
}
}
}