Android--SensorEventListener和AudioManager实现根据条件转换手机震动和响铃
这个例子实现的是根据手机的”状态“改变手机现在的模式。
当手机正面朝上时,手机处于响铃的状态,当手机背面朝上时,手机处于静音的状态。
实现这个例子需要用到手机内置的传感器,并实现相应的方法判断手机的状态。同时还需要用到手机的AudioManager类改变手机的模式。
首先,我么需要在AndroidManifest.xml文件中添加如下的代码:
<uses-permission android:name="android.permission.VIBRATE"/>
这行代码的功能是使得程序可以使用手机的震动模式。
下面给出具体的实现代码和相应的注释:
public class EX06_12 extends Activity
{/* 建立SensorManager对象 */private SensorManager mSensorManager01;private TextView mTextView01;/* 以私有类成员保存AudioManager模式 */private int strRingerMode;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);mTextView01 = (TextView)findViewById(R.id.myTextView1);/* 建立SensorManager对象,取得SENSOR_SERVICE服务 */try{mSensorManager01 = (SensorManager)getSystemService(Context.SENSOR_SERVICE);}catch(Exception e){e.printStackTrace();}/* 取得现有的AudioManager模式 */GetAudioManagerMode();/* 依据现有的AudioManager模式,显示于TextView当中 */switch(strRingerMode){/* 正常模式 */case AudioManager.RINGER_MODE_NORMAL:mTextView01.setText(R.string.str_normal_mode);break;/* 静音模式 */case AudioManager.RINGER_MODE_SILENT:mTextView01.setText(R.string.str_silent_mode);break;/* 震动模式 */case AudioManager.RINGER_MODE_VIBRATE:mTextView01.setText(R.string.str_vibrate_mode);break;}}/* 建立SensorListener捕捉onSensorChanged事件 */private final SensorEventListener mSensorListener = new SensorEventListener(){private float x, y, z;@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy){// TODO Auto-generated method stub}@Overridepublic void onSensorChanged(SensorEvent event){// TODO Auto-generated method stubsynchronized(mSensorManager01){switch (event.sensor.getType()){case Sensor.TYPE_ACCELEROMETER:x = event.values[0];y = event.values[1];z = event.values[2];if(z>9){/* 正面向上 *///mTextView01.setText("Face Up");/* 变更为正常模式 */ChangeToNormalMode();/* 调用变更模式后,再一次确认手机的模式为何 */switch(strRingerMode){case AudioManager.RINGER_MODE_NORMAL:mTextView01.setText(R.string.str_normal_mode);break;case AudioManager.RINGER_MODE_SILENT:mTextView01.setText(R.string.str_silent_mode);break;case AudioManager.RINGER_MODE_VIBRATE:mTextView01.setText(R.string.str_vibrate_mode);break;}}else if(z<-9){/* 正面向下 *///mTextView01.setText("Face Down");/* 先设定为静音模式 */ChangeToSilentMode();/* 再设定为震动模式 */ChangeToVibrateMode();/* 判断铃声模式 */switch(strRingerMode){/* 正常模式 */case AudioManager.RINGER_MODE_NORMAL:mTextView01.setText(R.string.str_normal_mode);break;/* 静音模式 */case AudioManager.RINGER_MODE_SILENT:mTextView01.setText(R.string.str_silent_mode);break;/* 震动模式 */case AudioManager.RINGER_MODE_VIBRATE:mTextView01.setText(R.string.str_vibrate_mode);break;}}else if(x>9){/* 正面向左 *///mTextView01.setText("Left Side");}else if(x<-9){/* 正面向右 *///mTextView01.setText("Right Side");}else if(y>9){/* 手掌正翻向自己直立 *///mTextView01.setText("Standing Up");}else if(y<-9){/* 手掌反翻反向直立 *///mTextView01.setText("On Head");}else{/* 其他无法判別 *///mTextView01.setText("In Between");}break;}}}};/* 取得当前的AudioManager模式 */private void GetAudioManagerMode(){try{/* 建立AudioManager对象,取得AUDIO_SERVICE */AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);if (audioManager != null){/* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */strRingerMode = audioManager.getRingerMode();}}catch(Exception e){mTextView01.setText(e.toString());e.printStackTrace();}}/* 变更为静音模式 */private void ChangeToSilentMode(){try{AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);if (audioManager != null){/* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);strRingerMode = audioManager.getRingerMode();}}catch(Exception e){mTextView01.setText(e.toString());e.printStackTrace();}}/* 变更为震动模式 */private void ChangeToVibrateMode(){try{AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);if (audioManager != null){/* 调用setRingerMode方法,设定模式 */audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);/* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */strRingerMode = audioManager.getRingerMode();}}catch(Exception e){mTextView01.setText(e.toString());e.printStackTrace();}}/* 变更为正常模式 */private void ChangeToNormalMode(){try{AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);if (audioManager != null){/* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);strRingerMode = audioManager.getRingerMode();}}catch(Exception e){mTextView01.setText(e.toString());e.printStackTrace();}}@Overrideprotected void onResume(){// TODO Auto-generated method stubmSensorManager01.registerListener ( mSensorListener, mSensorManager01.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);super.onResume();}@Overrideprotected void onPause(){// TODO Auto-generated method stub/* 重写onPause事件,取消mSensorListener */mSensorManager01.unregisterListener(mSensorListener);super.onPause();}
}
Android--SensorEventListener和AudioManager实现根据条件转换手机震动和响铃相关推荐
- android怎样添加图片锐化功能,如何在android处理图片(图像二值化锐化转换格式).doc...
如何在android处理图片(图像二值化锐化转换格式) 链接:如何在android处理图片( 图像二值化.锐化.转换格式) /thread-36559-1-1.html package net.wea ...
- android 布局可大可小,UI设计教程之:ios与android ui适配(将IOS UI转换成Android经验畅谈)...
内容提要:这是UI设计系列教程之ios与android ui适配经验畅谈.文章作者介绍了自己将IOS UI转换成Android经验,包括:不要直接转换.了解单位和组件缩放格式.屏幕尺寸DP和像素的换算 ...
- Android多语言支持以及繁简转换
Android多语言支持以及繁简转换 Android自身就带有多语言支持.前一段时间需要做一个同时支持繁简体的APP,经过简单的搜索和探索,轻松解决了问题.并且写了一个简单的繁体到简单的转换类.分享给 ...
- 【Android】SVG和VectorDrawable——相关格式转换
SVG是矢量图,刚接触尚不能仔细介绍,但只需记得一点:放大不失真,存储也方便. 因为多数户型图使用SVG格式,Android要用的话必须通过相关转换工具,将原SVG格式文件,转换为XML后缀的Vect ...
- Android开发之AudioManager(音频管理器)详解
AudioManager简介: AudioManager类提供了访问音量和振铃器mode控制.使用Context.getSystemService(Context.AUDIO_SERVICE)来得到这 ...
- Android Camera硬件结构组成(一)之 手机摄像头的组成结构和工作原理
Android Camera硬件结构组成(一)之 手机摄像头的组成结构和工作原理 参考网址: 1.https://www.cnblogs.com/straybirds/p/7350535.html 2 ...
- android 调用手机震动
范例说明提到了与手机的交互控制,就不能不提到手机震动事件.手机的震动,可以是一种提醒或替换铃声的事件,所以在这个范例中,将学到如何触发手机震动事件,虽然震动是手机默认的模式,但通过程序的辅助,可以做更 ...
- 设置android电话震动,Android手机震动的设置步骤
[www.citswd.com--服务合同] a.通过系统服务获得手机震动服务,Vibrator vibrator = (Vibrator)getSystemService(VIBRATOR_SERV ...
- 手机升级android5.0,Android 7.0就要来了?你家手机升级到5.0了吗?
原标题:Android 7.0就要来了?你家手机升级到5.0了吗? 时间来到 2016 年,中国人民在期盼着过年的到来,而国外友人则没闲着,比如谷歌就早早开始准备今年的开发者大会 ... 谷歌 I/O ...
最新文章
- 自定义Annotation
- 字符串去掉空格 trim()方法
- CPython对象模型:string(留坑待填)
- Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)
- GCD Counting
- 仿VS窗体效果+outlookbar效果
- android安卓应用和OBD的集成场景
- 肖仰华 | 知识图谱落地的基本原则与最佳实践
- windows+PHP+shell_exec()无法执行的原因
- 万亿级流量高可用延时服务架构设计
- IDEA 初次使用,记录心得
- E: Sub-process /usr/bin/dpkg returned an error code (1)
- Java map遍历
- 2021-03-08动力学方程
- 如何建立个人网站?先分享一下
- 关于 ZVT 的后期蜈蚣打发研究
- jquery根据HTML5视频播放实践,jQuery定制HTML 5视频播放器
- UE4代理委托(代理,动态代理,单播,多播)
- Java解析pmml格式机器学习模型
- 抖音电商主播考核绩效直播运营KPI方案
热门文章
- 升级10.11后使用CocoaPod出现-bash: pod: command not found 解决办法
- Eslint中no-undef的检查报错
- Apache 超详细编译参数解析
- asp.net 一次性提交大量数据,服务器会报错,要在 web.config 中设置一下
- IOS 学习笔记 2015-03-20 O之 nil,Nil,NULL,NSNull
- PHP中include、include_once、require、require_once四者区别
- 北京站售票员内部大量出票无耻的售票员(转)
- 在ASP.NET2.0中的的UrlRewrite
- Centos7下的Ambari安装
- Python技巧之“is”对比“==”