声音设置
调整手机的各种音量可以通过AudioManager这个类来操作
注:安卓手机各种音量的最大数值不一样,请通过下面具体的方法获取最大音量值。
涉及的参数说明:
streamType类型:(音量类型)
STREAM_ALARM 提示音
STREAM_MUSIC 音乐音量即多媒体音量
STREAM_NOTIFICATION 窗口顶部状态栏Notification,
STREAM_RING 铃声
STREAM_SYSTEM 系统
STREAM_VOICE_CALL 通话
STREAM_DTMF 双音多频
不过三方的Rom中 这些类型可能是多对一的 也就是 多种类型调节的是同一种
flags参数:(下面是常用的几个)
- FLAG_PLAY_SOUND 调整音量时播放声音
- FLAG_SHOW_UI 调整时显示系统的音量进度条
- 0 表示什么都不做
工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| import android.content.Context; import android.media.AudioManager;
public class ZJAudioUtil {
private AudioManager mAudioManager; private static ZJAudioUtil mInstance;
private ZJAudioUtil(Context context) { mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); }
public synchronized static ZJAudioUtil getInstance(Context context) { if (mInstance == null) { mInstance = new ZJAudioUtil(context); } return mInstance; }
public int getMediaMaxVolume() { return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); }
public int getMediaVolume() { return mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); }
public int getCallMaxVolume() { return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL); }
public int getSystemMaxVolume() { return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM); }
public int getSystemVolume() { return mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM); }
public int getAlermMaxVolume() { return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM); }
public void setAlermVolume(int volume) { mAudioManager.setStreamVolume( AudioManager.STREAM_ALARM, volume, AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI ); }
public void setNoticeVolume(int volume) { mAudioManager.setStreamVolume( AudioManager.STREAM_RING, volume, AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI ); }
public void setSystemVolume(int volume) { mAudioManager.setStreamVolume( AudioManager.STREAM_SYSTEM, volume, AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI ); }
public void setMediaVolume(int volume) { mAudioManager.setStreamVolume( AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI ); }
public void setCallVolume(int volume) { mAudioManager.setStreamVolume( AudioManager.STREAM_VOICE_CALL, volume, AudioManager.STREAM_VOICE_CALL); }
public void setSpeakerStatus(boolean on) { if (on) { mAudioManager.setSpeakerphoneOn(true); mAudioManager.setMode(AudioManager.MODE_NORMAL); } else { int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL); mAudioManager.setStreamVolume( AudioManager.STREAM_VOICE_CALL, max, AudioManager.STREAM_VOICE_CALL ); mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); mAudioManager.setSpeakerphoneOn(false); mAudioManager.setRouting( AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL ); } } }
|
另外,还有个public void adjustStreamVolume(int streamType, int direction, int flags)方法也可用来调整音量,
只不过不能设置具体数值,根据系统的阀值来自动调整,其中第1和第3个参数上面有说明,
下面是第2个参数的介绍:
direction是调整的方向,增加或减少:
- ADJUST_LOWER 降低音量
- ADJUST_RAISE 增加音量
- ADJUST_SAME 保持不变,这个主要用于向用户展示当前的音量
亮度设置
从Android6.0后 应用是不能修改系统屏幕亮度的 所以下面的工具类 一般也用不上
我们只能修改应用的亮度 方法如下
1 2 3 4 5 6
| private fun setWindowBrightness(brightness: Int) { val window = window val lp = window.attributes lp.screenBrightness = brightness / 255.0f window.attributes = lp }
|
但是我们并不能获取应用的亮度 因为 如果系统的亮度设置的是自动
那么lp.screenBrightness或取的值就会是-1
所以我们要判断系统是否为自动调节亮度 如果是的话 就要获取系统亮度
1 2 3 4 5 6 7 8
| public int getScreenBrightness() { int defVal = 125; return Settings.System.getInt( contentResolver, Settings.System.SCREEN_BRIGHTNESS, defVal ); }
|
工具类
屏幕亮度有两种调节模式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.view.Window; import android.view.WindowManager;
public class ZJBrightnessUtil {
private ContentResolver contentResolver; private static ZJBrightnessUtil mInstance; private Context mContext;
private ZJBrightnessUtil(Context context) { mContext = context; contentResolver = context.getContentResolver(); }
public synchronized static ZJBrightnessUtil getInstance(Context context) { if (mInstance == null) { mInstance = new ZJBrightnessUtil(context); } return mInstance; }
public void setScrennManualMode() { try { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!Settings.System.canWrite(mContext)) { Intent intent = new Intent( android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS ); intent.setData(Uri.parse("package:" + mContext.getPackageName())); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); } else { int mode = Settings.System.getInt( contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE ); if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) { Settings.System.putInt( contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL ); } } }
} catch (Settings.SettingNotFoundException e) { e.printStackTrace(); } }
public void setScrennAutoMode() { try { int mode = Settings.System.getInt( contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE ); if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL) { Settings.System.putInt( contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC ); } } catch (Settings.SettingNotFoundException e) { e.printStackTrace(); } }
public int getScrennMode() { try { int mode = Settings.System.getInt( contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE ); return mode; } catch (Settings.SettingNotFoundException e) { e.printStackTrace(); } return 0; }
public int getScreenBrightness() { int defVal = 125; return Settings.System.getInt( contentResolver, Settings.System.SCREEN_BRIGHTNESS, defVal ); }
public void saveScreenBrightness(int value) { setScrennManualMode(); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!Settings.System.canWrite(mContext)) { Intent intent = new Intent( android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS ); intent.setData(Uri.parse("package:" + mContext.getPackageName())); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); } else { Settings.System.putInt( contentResolver, Settings.System.SCREEN_BRIGHTNESS, value ); } }else{ Settings.System.putInt( contentResolver, Settings.System.SCREEN_BRIGHTNESS, value ); } } }
|