Android音量调节
程序员文章站
2022-05-12 10:41:25
...
Android音量调节
1、准备工作
//初始化音频管理器
AudioManager mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
//获取系统最大音量
int maxVolume=mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// 获取设备当前音量
int currentVolume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
// 设置seekbar的最大值
sbVolume.setMax(maxVolume);
// 显示音量
sbVolume.setProgress(currentVolume);
2、开始调节
调节音量有两种方式一种是渐进式,即像手动按音量键一样,一步一步增加或减少,另一种是直接设置音量值
- 渐进式
public void adjustStreamVolume (int streamType, int direction, int flags)
//减少音量
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,AudioManager.FX_FOCUS_NAVIGATION_UP);
//增加电量
mAudioManager.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE,AudioManager.FX_FOCUS_NAVIGATION_UP)
第一个streamType是需要调整音量的类型,这里设的是媒体音量,可以是:
STREAM_ALARM 警报
STREAM_MUSIC 音乐回放即媒体音量
STREAM_NOTIFICATION 窗口顶部状态栏Notification,
STREAM_RING 铃声
STREAM_SYSTEM 系统
STREAM_VOICE_CALL 通话
STREAM_DTMF 双音多频,不是很明白什么东西
第二个direction,是调整的方向,增加或减少,可以是:
ADJUST_LOWER 降低音量
ADJUST_RAISE 升高音量
ADJUST_SAME 保持不变,这个主要用于向用户展示当前的音量
第三个flags是一些附加参数,只介绍两个常用的
FLAG_PLAY_SOUND 调整音量时播放声音
FLAG_SHOW_UI 调整时显示音量条,就是按音量键出现的那个
- 直接设置
public void setStreamVolume (int streamType, int index, int flags)
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_PLAY_SOUND);
//得到听筒模式的最大值
mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
//得到听筒模式的当前值
mAudioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
3、兼用安卓7.0以上全代码
- Activity
package com.example.android_text;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.widget.SeekBar;
import com.example.android_text.common.BaseActivity;
public class SoundSettingsActivity extends BaseActivity {
AudioManager mAudioManager;
SeekBar linShengBar;
SeekBar tongHuaBar;
private static int REQUEST_CODE_READ_CONTACTS= 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sound_settings);
//获取系统的声音设置
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
linShengBar=findViewById(R.id.linShengBar);
tongHuaBar=findViewById(R.id.tongHuaBar);
initView();
qx();
}
private void initView() {
/*//系统音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
Log.d("SYSTEM", "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);*/
//通话音量
int tongMax = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
int tongCurrent = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
Log.d("VIOCE_CALL", "max : " + tongMax + " current : " + tongCurrent);
tongHuaBar.setMax(tongMax);//tongHuaBar最大通话声音值
tongHuaBar.setProgress(tongCurrent);//设置当前声音值
tongHuaBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
Log.i("SoundSettingsActivity", "tongHuaBar i: "+i+" b:"+b);
mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, i, 0);
int tongMax = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
int tongCurrent = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
Log.d("VIOCE_CALL", "max : " + tongMax + " current : " + tongCurrent);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
//铃声音量
int linMax = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
int linCurrent = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
Log.d("RING", "max : " + linMax + " current : " + linCurrent);
linShengBar.setMax(linMax);
linShengBar.setProgress(linCurrent);
linShengBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
Log.i("SoundSettingsActivity", "linShengBar: i: "+i+" b:"+b);
mAudioManager.setStreamVolume(AudioManager.STREAM_RING, i, 0);
int linMax = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
int linCurrent = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
Log.d("RING", "max : " + linMax + " current : " + linCurrent);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
private void qx(){
//android7.0以上 当您运行startActivity()时,Android会打开您的应用的免打扰访问设置.
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
&& !notificationManager.isNotificationPolicyAccessGranted()) {
Intent intent = new Intent(
android.provider.Settings
.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
startActivity(intent);
}
//获取权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& ActivityCompat.checkSelfPermission(SoundSettingsActivity.this,
Manifest.permission.READ_CONTACTS)
== PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(SoundSettingsActivity.this,
new String[]{ Manifest.permission.READ_CONTACTS },
REQUEST_CODE_READ_CONTACTS);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.i("abcd", "requestCode:"+requestCode);
if(requestCode==REQUEST_CODE_READ_CONTACTS){
Log.i("abcd", "以获取权限");
}
}
}
- xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".SoundSettingsActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:text="铃声音量"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:text="(1)-"/>
<SeekBar
android:id="@+id/linShengBar"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:max="100"
android:progress="0"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:text="(2)+"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:text="通话音量"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:text="(4)-"/>
<SeekBar
android:id="@+id/tongHuaBar"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:max="100"
android:progress="0"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:text="(5)+"/>
</LinearLayout>
</LinearLayout>
上一篇: 查找数组中最大值java
推荐阅读
-
Android中ContentProvider和ContentResolver详解
-
解决android Listview的item中最外层Margin失效的问题
-
Android textview 实现长按*选择复制功能的方法
-
Android 中CheckBox的isChecked的使用实例详解
-
解析Android截取手机屏幕两种实现方案
-
Android Studio安装配置方法图文教程
-
Android 自定义一套 Dialog通用提示框 (代码库)
-
Android XML設置屏幕方向(android:screenOrientation)详解
-
Android获取分享应用列表详解及实例
-
Android中pendingIntent与Intent的深入分析