Android 一体机研发之修改系统设置————声音
Android 一体机研发之修改系统设置————屏幕亮度
Android 一体机研发之修改系统设置————声音
Android 一体机研发之修改系统设置————自动锁屏
修改系统设置系列篇章马上开张了! 本章将为大家细节讲解声音。
对于声音功能大家都不陌生,在多媒体时代,它是很必要的,同样也是缺它不可的版块;而在一体机实际应用中,这里更改的是媒体音量。

声音
几个常见的 “音量类型”: STREAM_VOICE_CALL 通话、STREAM_SYSTEM 系统、STREAM_RING 铃声、 STREAM_MUSIC 媒体音量、STREAM_ALARM 闹钟、STREAM_NOTIFICATION 通知。
设计思路
- 获取音频管理器
- 获取媒体音量最大值
- 获取系统当前媒体音量
- 通过seekBar设置系统媒体音量
具体实现
获取音频管理器
- Java
AudioManager mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
- Kotlin
mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager
获取媒体音量最大值
- Java
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- Kotlin
mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
获取系统当前媒体音量
- Java
/*** 获取系统媒体音量* STREAM_VOICE_CALL 通话* STREAM_SYSTEM 系统* STREAM_RING 铃声* STREAM_MUSIC 媒体音量* STREAM_ALARM 闹钟* STREAM_NOTIFICATION 通知*/
mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- Kotlin
mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
设置系统媒体音量
- Java
voiceBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {Log.e("进度显示 >>>", "onProgressChanged: " + progress);//设置系统媒体音量setStreamVolume(progress);} public void onStartTrackingTouch(SeekBar seekBar) {} public void onStopTrackingTouch(SeekBar seekBar) {}});/*** 设置系统媒体音量* setStreamVolume 直接设置音量* adjustStreamVolume 步长式设置音量,即10,20,30这样阶梯式* <p>* 参数1:音量类型* 参数2:音量数值* 参数3:* AudioManager.FLAG_SHOW_UI 调整音量时显示系统音量进度条 , 0 则不显示* AudioManager.FLAG_ALLOW_RINGER_MODES 是否铃声模式* AudioManager.FLAG_VIBRATE 是否震动模式* AudioManager.FLAG_SHOW_VIBRATE_HINT 震动提示* AudioManager.FLAG_SHOW_SILENT_HINT 静音提示* AudioManager.FLAG_PLAY_SOUND 调整音量时播放声音*/private void setStreamVolume(int volume) {mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_PLAY_SOUND);}
- Kotlin
seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {Log.i("onProgressChanged----", "" + progress)mCurrentVolume = progress//更新页面updateNum(mCurrentVolume)//设置媒体音量setStreamVolume(mCurrentVolume)}override fun onStartTrackingTouch(seekBar: SeekBar?) {}override fun onStopTrackingTouch(seekBar: SeekBar?) {}})/*** 更新页面显示*/private fun updateNum(volume: Int) {//tv_volume.text = volume.toString()seekBar.progress = volume}/*** 设置系统媒体音量*/private fun setStreamVolume(volume: Int) {mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_SHOW_UI)}
监听系统按键
//监听系统按键 public boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_VOLUME_DOWN:if (mCurrentVolume > 0) {mCurrentVolume--;} else {mCurrentVolume = 0;}voiceBar.setProgress(mCurrentVolume);setStreamVolume(mCurrentVolume);Log.e("音量减 >>", "onKeyDown: " + mCurrentVolume );return true;case KeyEvent.KEYCODE_VOLUME_UP:if (mCurrentVolume < mMaxVolume) {mCurrentVolume++;} else {mCurrentVolume = mMaxVolume;}voiceBar.setProgress(mCurrentVolume);setStreamVolume(mCurrentVolume);Log.e("音量加 >>", "onKeyDown: " + mCurrentVolume );return true;/* case KeyEvent.KEYCODE_VOLUME_MUTE:return true;*/}return super.onKeyDown(keyCode, event);}
完整操作
- Java
/*** @author 拉莫帅* @date 2023/2/8* @address* @Desc 修改系统声音(媒体声音)*/
public class ChangeVoiceActivity extends AppCompatActivity {private AudioManager mAudioManager;private SeekBar voiceBar;//当前音量private int mCurrentVolume = 0;//最大音量private int mMaxVolume = 0; protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_chanage_voice);init();}private void init() {voiceBar = findViewById(R.id.voiceBar);ImageView back = findViewById(R.id.back);TextView title = findViewById(R.id.title);title.setText("声音");mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);/*** 获取系统媒体音量* STREAM_VOICE_CALL 通话* STREAM_SYSTEM 系统* STREAM_RING 铃声* STREAM_MUSIC 媒体音量* STREAM_ALARM 闹钟* STREAM_NOTIFICATION 通知*/mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);//获取媒体音量最大值mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);Log.e("进度 >>", "init: " + mCurrentVolume + "---" + mMaxVolume);voiceBar.setMax(mMaxVolume);//更新进度条voiceBar.setProgress(mCurrentVolume);back.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {finish();}});voiceBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {Log.e("进度显示 >>>", "onProgressChanged: " + progress);setStreamVolume(progress);} public void onStartTrackingTouch(SeekBar seekBar) {} public void onStopTrackingTouch(SeekBar seekBar) {}});}//监听系统按键 public boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_VOLUME_DOWN:if (mCurrentVolume > 0) {mCurrentVolume--;} else {mCurrentVolume = 0;}voiceBar.setProgress(mCurrentVolume);setStreamVolume(mCurrentVolume);Log.e("音量减 >>", "onKeyDown: " + mCurrentVolume );return true;case KeyEvent.KEYCODE_VOLUME_UP:if (mCurrentVolume < mMaxVolume) {mCurrentVolume++;} else {mCurrentVolume = mMaxVolume;}voiceBar.setProgress(mCurrentVolume);setStreamVolume(mCurrentVolume);Log.e("音量加 >>", "onKeyDown: " + mCurrentVolume );return true;/* case KeyEvent.KEYCODE_VOLUME_MUTE:return true;*/}return super.onKeyDown(keyCode, event);}/*** 设置系统媒体音量* setStreamVolume 直接设置音量* adjustStreamVolume 步长式设置音量,即10,20,30这样阶梯式* <p>* 参数1:音量类型* 参数2:音量数值* 参数3:* AudioManager.FLAG_SHOW_UI 调整音量时显示系统音量进度条 , 0 则不显示* AudioManager.FLAG_ALLOW_RINGER_MODES 是否铃声模式* AudioManager.FLAG_VIBRATE 是否震动模式* AudioManager.FLAG_SHOW_VIBRATE_HINT 震动提示* AudioManager.FLAG_SHOW_SILENT_HINT 静音提示* AudioManager.FLAG_PLAY_SOUND 调整音量时播放声音*/private void setStreamVolume(int volume) {mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_PLAY_SOUND);}
}
- Kotlin
class VolumeActivity : AppCompatActivity() {//音频管理器private lateinit var mAudioManager: AudioManager//当前音量private var mCurrentVolume: Int = 0//最大音量private var mMaxVolume: Int = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_volume)init()setListener()}("SetTextI18n")private fun init() {mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager/*** ringerMode 音量模式* RINGER_MODE_NORMAL 正常* RINGER_MODE_SILENT 静音* RINGER_MODE_VIBRATE 震动*/when (mAudioManager.ringerMode) {AudioManager.RINGER_MODE_NORMAL -> tv_mode.text = "当前音量模式:正常"AudioManager.RINGER_MODE_SILENT -> tv_mode.text = "当前音量模式:静音"AudioManager.RINGER_MODE_VIBRATE -> tv_mode.text = "当前音量模式:震动"}/*** 获取系统媒体音量* STREAM_VOICE_CALL 通话* STREAM_SYSTEM 系统* STREAM_RING 铃声* STREAM_MUSIC 媒体音量* STREAM_ALARM 闹钟* STREAM_NOTIFICATION 通知*/mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)//获取媒体音量最大值mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)seekBar.max = mMaxVolumetv_max.text = "最大音量:$mMaxVolume"updateNum(mCurrentVolume)}private fun setListener() {btn_mode.setOnClickListener {mAudioManager.ringerMode = AudioManager.RINGER_MODE_NORMALtv_mode.text = "当前音量模式:正常"}seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {Log.i("onProgressChanged----", "" + progress)mCurrentVolume = progressupdateNum(mCurrentVolume)setStreamVolume(mCurrentVolume)}override fun onStartTrackingTouch(seekBar: SeekBar?) {}override fun onStopTrackingTouch(seekBar: SeekBar?) {}})}/*** 更新页面显示*/private fun updateNum(volume: Int) {tv_volume.text = volume.toString()seekBar.progress = volume}/*** 设置系统媒体音量* setStreamVolume 直接设置音量* adjustStreamVolume 步长式设置音量,即10,20,30这样阶梯式** 参数1:音量类型* 参数2:音量数值* 参数3:* AudioManager.FLAG_SHOW_UI 调整音量时显示系统音量进度条 , 0 则不显示* AudioManager.FLAG_ALLOW_RINGER_MODES 是否铃声模式* AudioManager.FLAG_VIBRATE 是否震动模式* AudioManager.FLAG_SHOW_VIBRATE_HINT 震动提示* AudioManager.FLAG_SHOW_SILENT_HINT 静音提示* AudioManager.FLAG_PLAY_SOUND 调整音量时播放声音*/private fun setStreamVolume(volume: Int) {mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, AudioManager.FLAG_SHOW_UI)}
最近忙里偷闲,↓↓↓↓【谁家de码农陈先生】↓↓↓↓,里面定时给大家分享技术博文、前方高能资讯内容!欢迎各位老板点赞关注,你们就是我的动力源泉!
相关文章:

Android 一体机研发之修改系统设置————声音
Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 修改系统设置系列篇章马上开张了! 本章将为大家细节讲解声音。 对于声音功能大家都不陌生,在多…...
挖掘长尾关键词的五大思路
本文重点介绍做SEO挖掘长尾词的五大思路:长尾词是搜索量不大,但是关键词的量非常庞大的词,那我们可以通过以下方法挖掘:1、目标型长尾搜索的关键词是直接包含了商业需求的,直接能跟我们的服务或产品对接的,…...

ccc-Brief Introduction of Deep Learning-李宏毅(6)
文章目录Three Steps for Deep LearningFully Connect Feedforward NetworkMatrix OperationOutput Layer as Multi-Class ClassifierExample ApplicationNeural NetworkGoodness of functionPick the best functionThree Steps for Deep Learning 与机器学习三步骤基本相同。 …...
【TVM 学习资料】用 Schedule 模板和 AutoTVM 优化算子
完整 TVM 中文文档,访问→TVM 中文站 作者:Lianmin Zheng,Chris Hoge 本教程将展示如何用 TVM 张量表达式(TE)语言编写 schedule 模板,并通过 AutoTVM 对模板进行搜索,从而找到最佳 schedule。…...

蓝牙Mesh学习笔记(一)
Mesh系统结构1 Mesh网络分层1.1 模型层(Model layer)1.2 基础模型层(Foundation Model layer)1.3 接入层(Access layer)1.4 上层传输层(Upper transport layer)1.5 下层传输层(Lower transport layer)1.6 网络层(Network layer)1.7 承载层(Bearer layer)1.8 BLE内核规范(BLE Co…...
【1234. 替换子串得到平衡字符串】
来源:力扣(LeetCode) 描述: 有一个只含有 Q, W, E, R 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。 给你一个这样的字符…...

独自开:提供创业机会、享受平台分红、推出新颖赚钱副业
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 前言 独自开:一款聚焦软件定制开发,独立、自主、开放平台 独创分层标准化平台架构,满足系统不断生长的个性化需求多端一键部署前端业务交互与展…...

C++【二叉树进阶(二叉搜索树)】
文章目录前言1、二叉搜索树1-1、 二叉搜索树概念2、二叉搜索树操作2-1、树和节点的基本框架2-2、二叉搜索树的查找2-3、中序遍历2-4、二叉搜索树的插入2-5、二叉搜索树的删除3、二叉搜索树的模拟实现3-1、循环版本3-2、递归版本4、二叉搜索树的应用4-1、K模型4-2、KV模型4-3、K…...

【C++初阶】vector的使用
大家好我是沐曦希💕 文章目录一.vector介绍二、构造函数三、遍历1.[]2.迭代器3.范围for四、容量操作1.扩容机制五、增删查改六、迭代器失效问题一.vector介绍 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。…...
OPenPCDet windows流程及其问题
首先的首先极其不推荐将OPenPCDet运行在Windows上,过程非常复杂,适配也不是很好,不推荐在windows下载并训练,本人做这个主要是方便再笔记本电脑上对实验结果进行整理,处理一些简单的推理评估等任务。如有必要请继续阅读: 以下是正文: 常规的安装流程不再赘述,请参考官方…...

【自学Python】Python字符大小写判断
大纲 Python字符串是否是小写 Python字符串是否是小写教程 在开发过程中,有时候我们需要判断一个 字符串 是否是小写形式(即,所有的字符都是小写字母,不是英文字符的忽略不做判断),在 Python 中ÿ…...

设计模式之美总结(开源实战篇)
title: 设计模式之美总结(开源实战篇) date: 2023-01-10 17:13:05 tags: 设计模式 categories:设计模式 cover: https://cover.png feature: false 文章目录1. Java JDK 应用到的设计模式1.1 工厂模式在 Calendar 类中的应用1.2 建造者模式在 Calendar …...

两个月,测试转岗产品经理,我是怎么规划的?
本期同学依旧来自深圳 测试到产品转变,用了两个月 本周,为大家介绍M同学的佛系转岗经历 学员档 学员档案 原岗位:测试 转岗级别:中级产品经理 转岗特点: 1.未接触产品工作 2.对岗位地点要求严格 先看结果 …...

三数之和-力扣15-java排序+双指针
一、题目描述给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。…...

【编程基础之Python】3、创建Python虚拟环境
【编程基础之Python】3、创建Python虚拟环境创建Python虚拟环境为什么需要虚拟环境Windows上的Anaconda创建虚拟环境conda 命令conda env 命令创建虚拟环境切换虚拟环境验证虚拟环境Linux上的Anaconda创建虚拟环境创建虚拟环境切换虚拟环境验证虚拟环境总结创建Python虚拟环境 …...

kettle开发-Day36-循环驱动作业
前言:在日常数据处理时,我们通过变量传参来完成某个日期的数据转换。但可能因程序或者网络原因导致某个时间段的数据抽取失败。常见导致kettle作业失败的原因大概分为三大类,数据源异常、数据库异常、程序异常。因此面对这些异常时࿰…...
2023秋招 新凯来 算法工程师 面经分享
本专栏分享 计算机小伙伴秋招春招找工作的面试经验和面试的详情知识点 专栏首页:秋招算法类面经分享 主要分享计算机算法类在面试互联网公司时候一些真实的经验 一面 技术面 30分钟左右 1.主要是问项目和论文上的东西,问的不深,中间还介绍他们是做缺陷检测的,大概问了16分钟…...

Web3CN|Damus刷频背后,大众在期待什么样的去中心化社交?
刚过去的一周,许多人的朋友圈包括Twitter、Faceboo在内都在被一串公钥字母刷屏,其重要起因就是 Twitter 前首席执行官 Jack Dorsey 发推称,(2月1日)基于去中心化社交协议 Nostr 的社交产品 Damus 和 Amethyst 已分别在…...
Jenkins自动发布到WindowsServer,在WindowsServer执行的命令
echo off set apppoolname"6.usegitee" set websitename"6.usegitee" set webfolder"usegitee" echo 停止站点的应用程序池 C:\Windows\System32\inetsrv\appcmd.exe stop apppool %apppoolname% echo 停止站点 c:\Windows\System32\inetsrv\a…...

【Git学习】Git如何Clone带有Submodule的仓库?
文章目录一、问题描述二、解决问题三、参考链接四、解决问题4.1 下载主模块4.2 查看主模块的配置4.2 子模块的添加4.3 查看子模块的配置4.4 查看子模块的检出状态4.5 检出submodule4.6 再次查看.git/config4.7 重新打开Android Studio运行代码一、问题描述 在GitHub上下载了一…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...