这个例子实现的是根据手机的”状态“改变手机现在的模式。

当手机正面朝上时,手机处于响铃的状态,当手机背面朝上时,手机处于静音的状态。

实现这个例子需要用到手机内置的传感器,并实现相应的方法判断手机的状态。同时还需要用到手机的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实现根据条件转换手机震动和响铃相关推荐

  1. android怎样添加图片锐化功能,如何在android处理图片(图像二值化锐化转换格式).doc...

    如何在android处理图片(图像二值化锐化转换格式) 链接:如何在android处理图片( 图像二值化.锐化.转换格式) /thread-36559-1-1.html package net.wea ...

  2. android 布局可大可小,UI设计教程之:ios与android ui适配(将IOS UI转换成Android经验畅谈)...

    内容提要:这是UI设计系列教程之ios与android ui适配经验畅谈.文章作者介绍了自己将IOS UI转换成Android经验,包括:不要直接转换.了解单位和组件缩放格式.屏幕尺寸DP和像素的换算 ...

  3. Android多语言支持以及繁简转换

    Android多语言支持以及繁简转换 Android自身就带有多语言支持.前一段时间需要做一个同时支持繁简体的APP,经过简单的搜索和探索,轻松解决了问题.并且写了一个简单的繁体到简单的转换类.分享给 ...

  4. 【Android】SVG和VectorDrawable——相关格式转换

    SVG是矢量图,刚接触尚不能仔细介绍,但只需记得一点:放大不失真,存储也方便. 因为多数户型图使用SVG格式,Android要用的话必须通过相关转换工具,将原SVG格式文件,转换为XML后缀的Vect ...

  5. Android开发之AudioManager(音频管理器)详解

    AudioManager简介: AudioManager类提供了访问音量和振铃器mode控制.使用Context.getSystemService(Context.AUDIO_SERVICE)来得到这 ...

  6. Android Camera硬件结构组成(一)之 手机摄像头的组成结构和工作原理

    Android Camera硬件结构组成(一)之 手机摄像头的组成结构和工作原理 参考网址: 1.https://www.cnblogs.com/straybirds/p/7350535.html 2 ...

  7. android 调用手机震动

    范例说明提到了与手机的交互控制,就不能不提到手机震动事件.手机的震动,可以是一种提醒或替换铃声的事件,所以在这个范例中,将学到如何触发手机震动事件,虽然震动是手机默认的模式,但通过程序的辅助,可以做更 ...

  8. 设置android电话震动,Android手机震动的设置步骤

    [www.citswd.com--服务合同] a.通过系统服务获得手机震动服务,Vibrator vibrator = (Vibrator)getSystemService(VIBRATOR_SERV ...

  9. 手机升级android5.0,Android 7.0就要来了?你家手机升级到5.0了吗?

    原标题:Android 7.0就要来了?你家手机升级到5.0了吗? 时间来到 2016 年,中国人民在期盼着过年的到来,而国外友人则没闲着,比如谷歌就早早开始准备今年的开发者大会 ... 谷歌 I/O ...

最新文章

  1. 自定义Annotation
  2. 字符串去掉空格 trim()方法
  3. CPython对象模型:string(留坑待填)
  4. Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)
  5. GCD Counting
  6. 仿VS窗体效果+outlookbar效果
  7. android安卓应用和OBD的集成场景
  8. 肖仰华 | 知识图谱落地的基本原则与最佳实践
  9. windows+PHP+shell_exec()无法执行的原因
  10. 万亿级流量高可用延时服务架构设计
  11. IDEA 初次使用,记录心得
  12. E: Sub-process /usr/bin/dpkg returned an error code (1)
  13. Java map遍历
  14. 2021-03-08动力学方程
  15. 如何建立个人网站?先分享一下
  16. 关于 ZVT 的后期蜈蚣打发研究
  17. jquery根据HTML5视频播放实践,jQuery定制HTML 5视频播放器
  18. UE4代理委托(代理,动态代理,单播,多播)
  19. Java解析pmml格式机器学习模型
  20. 抖音电商主播考核绩效直播运营KPI方案

热门文章

  1. 升级10.11后使用CocoaPod出现-bash: pod: command not found 解决办法
  2. Eslint中no-undef的检查报错
  3. Apache 超详细编译参数解析
  4. asp.net 一次性提交大量数据,服务器会报错,要在 web.config 中设置一下
  5. IOS 学习笔记 2015-03-20 O之 nil,Nil,NULL,NSNull
  6. PHP中include、include_once、require、require_once四者区别
  7. 北京站售票员内部大量出票无耻的售票员(转)
  8. 在ASP.NET2.0中的的UrlRewrite
  9. Centos7下的Ambari安装
  10. Python技巧之“is”对比“==”