技术标签: audiomanager.java
AudioManager类位于android.Media
包中,该类提供访问控制音量和钤声模式的操作。
通过getSystemService(Context.AUDIO_SERVICE)方法获得AudioManager实例对象。
AudioManager audiomanage =
(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
audiomanager就是我们定义的控制系统声音的对象。
这里只讲述几个比较常用到的方法:
adjustVolume(int direction, int flags)
——用来控制手机音量大小,当传入的第一个参数为AudioManager.ADJUST_LOWER
时,可将音量调小一个单位,传入AudioManager.ADJUST_RAISE时,则可以将音量调大一个单位。
adjustStreamVolume(int streamType, int direction,
intflags)——(以步长)调节手机音量大小
参数1:声音类型,可取为STREAM_VOICE_CALL(通话)、STREAM_SYSTEM(系统声音)、STREAM_RING(铃声)、STREAM_MUSIC(音乐)、STREAM_ALARM(闹铃声)
参数2:调整音量的方向,可取ADJUST_LOWER(降低)、ADJUST_RAISE(升高)、ADJUST_SAME
参数3:可选的标志位
setStreamVolume(int streamType, int index,
intflags)——直接设置音量大小
getMode() ——返回当前音频模式,如 NORMAL(普通), RINGTONE(铃声),
orIN_CALL(通话)
setMode()——设置声音模式,可取值NORMAL(普通), RINGTONE(铃声), or
IN_CALL(通话)
getRingerMode()——返回当前的铃声模式。如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(静音)、RINGER_MODE_VIBRATE(震动)
setRingerMode(int ringerMode) ——改变铃声模式
getStreamVolume(int
streamType)——取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。
getStreamMaxVolume(int streamType)——获得当前手机最大铃声。
setStreamMute(int streamType, boolean state
//音量控制,初始化定义
AudioManager mAudioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE);
//最大音量
int maxVolume
=mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//当前音量
int currentVolume
=mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
直接控制音量的多少:
1
2
3
4
5
if(isSilent){
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,0,0);
}else{
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,tempVolume,0);//tempVolume:音量绝对值
}
以一步步长控制音量的增减,并弹出系统默认音量控制条:
1
2
3
4
5
6
7
8
9
10
//降低音量,调出系统音量控制
if(flag
==0){
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,
AudioManager.FX_FOCUS_NAVIGATION_UP);
}
//增加音量,调出系统音量控制
else if(flag
==1){
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,
AudioManager.FX_FOCUS_NAVIGATION_UP);
}
常用方法:
android audioManager获取音量:
先获取AudioManager实例,
AudioManager mAudioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE);
//通话音量
int max =
mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL
);
int current = mAudioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL
);
//系统音量
int max =
mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM
);
//铃声音量
max = mAudioManager.getStreamMaxVolume(
AudioManager.STREAM_RING);
current = mAudioManager.getStreamVolume(AudioManager.STREAM_RING
);
//音乐音量
max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC
);
current = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC
);
//提示声音音量
max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM );
current = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM );
------------------------------------------------------------------------------------------------------------------------
首先上层java调用
XXXPlayer
AudioManager audiomanage = (AudioManager)
context.getSystemService(Context.AUDIO_SERVICE);
audiomanager就是我们定义的控制系统声音的对象,(如果context报错,可将其改成XXXPlayer.this)
audiomanager.SetStreamVolume(AA,BB,CC),是我们可以直接使用的AudioManager的成员函数,3个参数表示的意思:AA:有内置的常量,可以在AudioManager里面查到相关的定义,我们在此用
AudioManager.STREAM_MUSIC, BB:自己设置音量的值,CC:也是一些标示量,我在此设置为0;
1.AudioManager.java
public void setStreamVolume(int streamType, int index, int
flags);上层接口
1)调用IAudioService service = getService();
当程序开启时会获得service,调用此来获得
2.执行ServiceManager.java public static IBinder getService(String name)获取audio服务
3.AudioService.java public void setStreamVolume(int streamType, int index, int
flags)//服务接口
1) private void
setStreamVolumeInt(int streamType, int index, boolean force,
boolean lastAudible)//服务函数
2)调用以下函数 sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, streamType,
SENDMSG_NOOP, 0, 0,streamState, 0)
//Post message to set system volume (it in turn will post a
message
// to persist)
3)AudioHandler::setSystemVolume(VolumeStreamState
streamState);//sendmsg(...)后执行函数
4)调用AudioHandler::setStreamVolumeIndex(int stream, int
index)
5)AudioSystem.setStreamVolumeIndex(stream,index);//audioSystem接口
static int android_media_AudioSystem_setStreamVolumeIndex(JNIEnv
*env, jobject thiz, jint stream, jint index)
1)调用AudioSystem::setStreamVolumeIndex
6.status_t AudioSystem::setStreamVolumeIndex(stream_type stream,
int index)(处理到这时,也可以直接走AudioFlinger路线,不经过策略)
1)获得服务 const sp& aps =
AudioSystem::get_audio_policy_service();
2)调用aps->setStreamVolumeIndex(stream, index)
7.status_t
AudioPolicyService::setStreamVolumeIndex(AudioSystem::stream_type
stream, int index)
1)调用mpPolicyManager->setStreamVolumeIndex(stream,
index)
status_t
AudioPolicyManager::setStreamVolumeIndex(AudioSystem::stream_type
stream, int index)
1)记录音量index: mStreams[stream].mIndexCur = index
2)compute and apply stream volume on all outputs:
checkAndSetVolume(stream, index, mOutputs.keyAt(i),
mOutputs.valueAt(i)->device())
8.status_t AudioPolicyManager::checkAndSetVolume(int stream, int
index, audio_io_handle_t output, uint32_t device, int delayMs, bool
force)
1)计算音量:float volume = computeVolume(stream, index, output,
device);
2)调用:mpClientInterface->setStreamVolume((AudioSystem::stream_type)stream,
volume, output, delayMs);
9.status_t
AudioPolicyService::setStreamVolume(AudioSystem::stream_type
stream, float volume, audio_io_handle_t output, int
delayMs)
调用mAudioCommandThread->volumeCommand((int)stream, volume,
(int)output, delayMs);
10.status_t
AudioPolicyService::AudioCommandThread::volumeCommand(int stream,
float volume, int output, int delayMs)
调用insertCommand_l(command, delayMs);
补充1)在条用getService();获取服务的时候
,实际调用的是ServiceManager.getService(context);
系统服务都是由serviceManager来管理的,要添加服务,可以调用serviceManager.AddService(context,service);
每添加一个service,都会有对应的唯一context, 当getService的时候就会根据context获得相应的服务,
可查看ServiceManager.java, ServiceManager.h/cpp
补充2) AudioService 的接口在 IaudioService.aidl中定义。添加自定义功能时(
我们创建控制接口比如创建个音效处理的接口SetEffectVolume(XXX),可以参照SetStreamVolume(a,b,c))别忘了修改此处,否则,AudioManager
会出现cannot find symbol..错误!!!
补充3)编译的时候可能会在Audiomanager.java中调用自己写的接口时出错,此时先将该文件中的调用注释掉,执行 make
update-api
执行完成后,将注释去掉,然后从新编译。。。
ZipUtil 压缩文件目录
十进制数转为二进制(java实现)一、转换方法:辗转相除:我们一直给十进制数除以2,知道商为0,再把所有的余数逆序写出即是改十进制数对应的二进制数。二、代码实现:package temptest;import java.lang.Math;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class tobinary {binary2(int data){ int b2=_将一个十进制数转换为二进制数java
Mybatisplus1. 创建数据库以及表2. Mybatis传统写法2.1 建立实体类2.2 创建UserMapper2.3 创建配置文件,建立数据源2.4 创建xml,写SQL2.5 写测试用例2.6 测试结果3. Mybatis改造成MyBatis-Plus3.1 将UserMapper继承BaseMapper,将拥有了BaseMapper中的所有方法:3.2 使用MP中的MybatisSqlSessionFactoryBuilder进程构建3.3 测试结果4. Spring + Mybatis +
第16章:阶段二:黏性1、产品的黏性可以观察日/周/月活跃用户,留意他们最在意哪些功能。在这个阶段,需要让产品变为他们生活中必不可少的部分,不应期待快速增长。第一要务是打造一组核心功能,保证用户的频繁使用与功能的成功应用。2、不要过早追求病毒性,用户多并不解决一切问题,除非用户具有参与度和黏性。最终目标是留存率。3、开发功能前7问:(1)这个功能有什么帮助?(2)你能衡量这一功能的效..._两秒精益第16章读后感
ES弊端: Elasticsearch集群的脑裂问题http://blog.csdn.net/cnweike/article/details/39083089正常情况下,集群中的所有的节点,应该对集群中master的选择是一致的,这样获得的状态信息也应该是一致的,不一致的状态信息,说明不同的节点对master节点的选择出现了异常——也就是所谓的脑裂问题。这样的脑裂状态直接让节点失去了集_es 节点 高负载 导致无法通信
DML 数据操作1. 数据导入1.1 向表中Load数据语法load data [local] inpath '数据的 path' [overwrite] into table student [partition (partcol1=val1,…)];load data: 表示加载数据local: 表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表inpath: 表示加载数据的路径overwrite: 表示覆盖表中已有数据,否则表示追加into tab_头歌hive表dml操作
重新认识开始关注数据结构,始于一次面试过程,记得当时被问及”你对数据结构的作用有什么理解?你用过哪些数据结构?“ 结果菜鸟本质立马暴露!先来看看大牛们对数据结构的理解:数据结构在编程项目中的作用..._c++数据结构入门csdn
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本文来源:公众号每日豆瓣(ID:douban)“导师”这个词,大家都不陌生吧。有的导师像父母般关切你的生活,有的导师像...
E:\nginx-1.4.4\src\corengx_palloc.c一、内存池的创建ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log){ ngx_pool_t *p; p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log
reshapearr = [1,2,3,4,5,6,7,8,9] #一个一维list,长度9现在把他变成3*3的矩阵arr.reshape(3, 3)arr.reshape(-1, 3)-1 的意思就是我不知道需要分成多少行,但是我只知道需要分成3列MNISTmnist数据中的images维度是(60000, 784),需要把它转换成28*28的矩阵images[i].reshape(28, 28)...
ShellExecute, WinExec, CreateProcessShellExecute ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。 有几个API函数都可以实现这些功能,但是在大多数情况下ShellExecute是更多的被使用的,同时它并不是太复杂。 ShellE...
一、简介GeoServer是 OpenGIS Web 服务器规范的 J2EE 实现,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息二、安装GeoServer是基于Java的软件,运行的时候需要JDK的支持,也需要下载一个tomcat,基础环境就不啰嗦了,主要涉及geos...