IOS代码修改音量实例详解

IOS代码修改音量实例详解

最近在做一个项目,需要用户在打开APP后,自动将音量调节到某个值,于是研究了一下。

之前做过iOS上声音的研究,苹果对iPhone设备的输入/输出的控制很严格,因为苹果要控制用户体验的一致性。比如:用户将耳机拔下来的时候,苹果认为,用户这时候不希望其他人知道自己在听什么,于是这时候声音会被自动暂停。在音量调整上,苹果也采取了类似的策略。苹果认为,用户不需要APP来为他指定音量,因为这样有时候用户会感到不舒服。苹果的开发文档是这么说的:

You cannot change device volume programatically,however MPVolumeView (volume slider) is there to change device volume but only through user interaction.

苹果提供了一个让用户手动修改音量的方法:MPVolumeView。用户通过拖动slider bar修改音量,就是下面这玩意儿:

虽然苹果将几乎所有的代码实现控制音量的方法都堵死了,但通过一些私有的方法还是可以修改的。比如,我们遍历一下MPVolumeView的subViews,从中得到UISlider,然后修改slider的value。这种方法虽然可以修改,但访问了私有的类,有被App Store拒绝的风险。而且不知道什么时候苹果修改MPVolumeView的结构,这样的方法就不行了。

下面介绍一个可以修改音量的小trick,一个苹果想干掉而没法干掉的方法:

MPMusicPlayerController* musicController = [MPMusicPlayerController applicationMusicPlayer];
musicController.volume = 0.2; 

使用之前需要添加MediaPlayer.framework。

为什么说苹果想干掉而没法干掉呢?这个方法是在iOS3.0里添加的,当时估计还没有”不允许使用代码修改音量“这样的规范;后来在7.0的时候,这个方法被depress掉了,说明苹果是想干掉的。但是对于一个持续改进的系统来说,一般都要做向前兼容,否则就会出现像WP6-WP7-WP8这样的悲剧。所以苹果对于去掉一个方法是非常谨慎的,终于还是把这个方法留着了,在它强大的围墙里给开发都留下了一扇窗户。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 利用iOS动画来模拟音量振动条的实现

    iOS动画来模拟音量振动条,即利用CAReplicatorLayer实现,以下将详细的介绍CAReplicatorLayer和实现方法. 音量振动条 效果图: 如何实现? 创建3个layer,按顺序播放y轴缩放动画 利用CAReplicatorLayer实现 1.什么是CAReplicatorLayer? 一种可以复制自己子层的layer,并且复制出来的layer和原生子层有同样的属性,位置,形变,动画. 2.CAReplicatorLayer属性 instanceCount: 子层总数(包括原

  • iOS中滑动控制屏幕亮度和系统音量(附加AVAudioPlayer基本用法和Masonry简单使用)

    如图,左侧上下滑动改变亮度,右侧上下滑动改变音量. 1.改变屏幕亮度 //获得当前屏幕亮度 light = [UIScreen mainScreen].brightness; light = 0.5f; //直接赋值或者使用set方法皆可 [UIScreen mainScreen].brightness = light; 2.改变系统音量 使用的比较多的就是通过MPMusicPlayerController来改变系统音量,主要归功于MPMusicPlayerController的音量和系统的同步

  • IOS代码修改音量实例详解

    IOS代码修改音量实例详解 最近在做一个项目,需要用户在打开APP后,自动将音量调节到某个值,于是研究了一下. 之前做过iOS上声音的研究,苹果对iPhone设备的输入/输出的控制很严格,因为苹果要控制用户体验的一致性.比如:用户将耳机拔下来的时候,苹果认为,用户这时候不希望其他人知道自己在听什么,于是这时候声音会被自动暂停.在音量调整上,苹果也采取了类似的策略.苹果认为,用户不需要APP来为他指定音量,因为这样有时候用户会感到不舒服.苹果的开发文档是这么说的: You cannot chang

  • iOS UITableView 与 UITableViewController实例详解

    很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名. UITableView 对象虽然只能显示一行数据,但是没有行数限制. •编写新的应用程序 JXHomepwner 应用 创建应用,填写基本信息 •UITableViewController UITableView 是视图.我们知道 模型-视图-控制器(Model-View-Controller),他是我们必须遵守的一种

  • IOS 绘制三角形的实例详解

    IOS 绘制三角形的实例详解 先上效果图 上面三角形的代码 - (void)ljTestView { CGPoint piont1; piont1.x = 170; piont1.y = 100; CGPoint piont2; piont2.x = 50; piont2.y = 200; CGPoint piont3; piont3.x = 220; piont3.y = 200; ljDrawRect *_ljView = [[ljDrawRect alloc]initStartPoint:

  • IOS 获取网络图片大小实例详解

    IOS 获取网络图片大小实例详解 在iOS开发过程中经常需要通过网络请求加载图片,有时,需要在创建UIImageView或UIButton来显示图片之前需要提前知道图片的尺寸,根据图片尺寸创建对应大小的控件.但是对于网络图片来说,要想通过最优的方法获得尺寸就略微有点困难,大体思路就是下面这种: 如果有使用SDWebImage,则首先检查是否缓存过该图片,如果没有,先通过文件头获取图片大小(针对格式为png.gif.jpg文件获取其尺寸大小),如果获取失败,则下载完整的图片data,然后计算大小,

  • 微信小程序点击控件修改样式实例详解

    微信小程序点击控件修改样式实例详解 现在要在微信小程序中实现点击控件修改样式,如下: 微信小程序中不支持直接操作dom,要实现这种效果,我们需要通过设置data,然后利用数据和界面的双向绑定来实现它. 第一步:在wxss中定义被点击和未被点击的样式,如下: .service_selection .is_checked{ border: 1px solid #FE0002 ; color: #FE0002 ; background: #fff; } .service_selection .norm

  • MySQL 修改密码实例详解

    MySQL 修改密码实例详解 许久不用MySQL了,今天打开HediSQL连接mysql时发现root密码忘记了,修改密码操作捣鼓了一阵子,记录一下,以备后用.(Win10本机操作) 关闭MySQL服务:net stop MySQL 以管理员身份打开cmd控制台窗口,进入MySQL所在目录的bin目录,执行mysqld --skip-grant-tables 再另开一个cmd窗口直接执行mysql命令(由于2操作已经是无需授权即可访问表,所以直接用mysql,不带用户名和密码即可登录) 切换到m

  • Android MTU 值修改的实例详解

    Android MTU 值修改的实例详解 通信术语 最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位).最大传输单元这个参数通常与通信接口有关(网络接口卡.串口等). 1.首先使用 adb 命令进入系统,然后 ifconfig 查看可用网络 C:\>adb shell $ su su # ifconfig ifconfig lo Link encap:Local Loopback inet addr:12

  • IOS 基本文件操作实例详解

    IOS 基本文件操作实例详解 在iOS的App沙盒中,Documents和Library/Preferences都会被备份到iCloud,因此只适合放置一些记录文件,例如plist.数据库文件.缓存一般放置到Library/Caches,tmp文件夹会被系统随机清除,不适宜防止数据. [图片缓存的清除] 在使用SDWebImage时,图片被大量的缓存,有时需要获取缓存的大小以及清除缓存. 要获取缓存大小,使用SDImageCache单例的getSize方法拿到byte为单位的缓存大小,注意计算时

  • Monaco Editor开发SQL代码提示编辑器实例详解

    目录 安装 简易 SQL 编辑器 相关功能 获取选中代码 替换选中代码 处理光标位置 自定义 SQL 库表提示,并保留原有 SQL 提示 编辑器 resize 编辑器设置主题 SQL 代码格式化 右键菜单汉化 记得销毁编辑器对象哦 踩坑 如何快速去看懂 Monaco Editor 安装 安装依赖,这里请注意版本 yarn add monaco-editor@0.29.1 yarn add monaco-editor-webpack-plugin@5.0.0 配置 webpack 插件 // vu

  • unittest+coverage单元测试代码覆盖操作实例详解

    基于上一篇文章,这篇文章是关于使用coverage来实现代码覆盖的操作实例,源代码在上一篇已经给出相应链接. 本篇文章字用来实现代码覆盖的源代码,整个项目的测试框架如下: 就是在源代码的基础上加了一个CodeCover.py文件,执行该文件会在目录CoverageReport生成相应的覆盖报告.如下是CodeCover.py的源码: #coding=utf8 import os import time def findTestWithPath(): current_dir=os.getcwd()

随机推荐