大家好,今天给各位分享安卓怎么弄网站源码分享打开的一些知识,其中也会对安卓怎么弄网站源码分享打开的进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
在360开测平台中,线上的手机需要对音量进行一个控制,防止一些视频,音乐,游戏的apk发出的声音,影响办公环境,但是需要在360开测平台录制视频,音频脚本的需求来讲,我们不能直接控制静音,需要对apk进行一个合理的兼容,动态的去设置声音和检测声音。
在android开发中,我们可以使用AudioManager中调用setStreamMute和getStreamVolume两个方法来设置和获取当前的音量。但是在Android7.0版本以上,我们需要动态的去申请免打扰的权限,也就是需要手工介入。
所需要的权限限制:
Manifest.permission.MODIFY_PHONE_STATE</code><codestyle=&34;LiberationMono&39;>Manifest.permission.ACCESS_NOTIFICATION_POLICY\n
这些权限的限制,对脚本来说简直就是灾难。下面我们来看一下28的源码:(注意我标红的地方,以setStreamVolume源码为例)
我们翻看一下AudioManager:
900×17761.3KB
参数说明(下面说的参数都是这三个参数)</code>`intstreamType:就是你设置设置音量的类型,是一个常量,比如说AudioManager.STREAM_MUSIC就是说媒体音量。“intindex:控制声音的大小,范围不同,有的范围是[0~15],有的范围[0~7],设置的时候可以先查询一下。`<code>intflags:设置后有什么变化,比如说FLAG_PLAY_SOUND等等…\n
本质就是获取IAudioServer服务,然后调用了setStreamVolume。
IAudioService
879×71263.1KB
这个类是一个接口类,其中setStreamVolume,4个参数(参数越多,反射越困难,并且u1包是不包含context对象的)
AudioService
既然IAudioService是一个接口类,那么,必然有实现这个类的地方,要不然就属于无效代码了。
824×45159.2KB
一些权限控制和最终实现的地方。最终实现的还有另外一个方法,我就不粘贴了,网上基本都能找到。
到这里为止,就会发现,想反射调用难度有点大。那我们直接来看使用adb命令来控制声音音量。
在网上都可以找到
blog.csdn.net
Android10、11adb设置音量/修改具体项目的音量_小feifei的博客-CSDN博客_adb音量
Android10、11adb设置音量/修改具体项目的音量
这样一篇文章,这篇文章并不是只有Android10才可以使用,它的使用范围是手机版本>=8.0版本就可以使用了。
我们来看一下命令:
adbshellmediavolume–show–stream3–set1</code>`–stream后面跟streamType这个参数,int类型`<code>–set后面跟index这个参数的数值,int类型\n
在手机版本<8.0版本中,调用这个命令会出错,说没有volume这个服务,那低版本的怎么兼容呢?
5.1.0版本
adbshellservicecallaudio4i32streamTypei32indexi32flags\n
i32是int类型的整数,后面跟了设置声音的三个参数。
audio是系统服务,我们可以执行
adbshellservicelist\n
来查看服务,看下图:
831×30365.2KB
那后面跟着4怎么解释?
877×55351.7KB
我们把IAudioService源码打开,看到setStreamVolume是第四个方法,是不是很清楚明白了。
那我们看一下怎么获取当前音量的值:
servicecallaudio13i32streamType\n
没看错,还是直接看getStreamVolume在第几个就可以了。
通过上面的逻辑,我们直接找源码,可以把Android所有版本都可以这么做:
</code>`/**“*设置声音“*@paramtype“*@paramvolume“*@return“*/“publicStringsetAudioCMD(inttype,intvolume){“Stringcmd=&34;;“if(Build.VERSION.SDK_INT==22){“cmd=String.format(&34;,type,volume);“}elseif(Build.VERSION.SDK_INT>=23||Build.VERSION.SDK_INT<=25){“cmd=String.format(&34;,type,volume);“}elseif(Build.VERSION.SDK_INT>=26){“cmd=String.format(&34;,type,volume);“}“returncmd;`<codestyle=&34;LiberationMono&39;>}\n
/**</code>`*查看手机声音设置是否成功“*@paramtype2手机铃声3手机媒体音量“*@return“*/“publicStringgetAudioCMD(inttype){“Stringcmd=&34;;“if(Build.VERSION.SDK_INT==22){“cmd=String.format(&34;,type);“}elseif(Build.VERSION.SDK_INT==23){“cmd=String.format(&34;,type);“}elseif(Build.VERSION.SDK_INT==24||Build.VERSION.SDK_INT==25){“cmd=String.format(&34;,type);“}elseif(Build.VERSION.SDK_INT>=26){“cmd=String.format(&34;,type);“}“returncmd;`<codestyle=&34;LiberationMono&39;>}\n
我们最后来看一下最后的结果输出:
android版本>=8.0</code>“`[v]willcontrolstream=2(STREAM_RING)“[v]willgetvolume“[v]ConnectingtoAudioService“[v]volumeis6inrange[0..15]“\n“当前声音是6,范围是[0..15]“\n“android版本<8.0“\n“\tResult:Parcel(0000000000000009&39;)“\t`<codestyle=&34;LiberationMono&39;>\t当前的声音是9,00000009是用16进制表示声音的。\n
参考文献
https://www.androidos.net.cn/sourcecodeAndroid源码查看的网站,感谢作者的分享
https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=toutiao×tamp=1660662393&author=Muller
文章到此结束,如果本次分享的安卓怎么弄网站源码分享打开和安卓怎么弄网站源码分享打开的的问题解决了您的问题,那么我们由衷的感到高兴!