我们在使用微信听声音时,当手机贴近耳朵,声音就由手机听筒里发出来,当我们将手机离开耳朵时,扬声器里则发出声音。还有,我们在通电话时,当手机贴近耳朵时,屏幕就自动关闭,离开时,屏幕就自动打开了。

这里利用到了手机的距离传感器功能;下面我们来实现此功能;

贴代码:

布局XML(四个按钮,实则只用到了两个):

[html] view plain
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:orientation="vertical"
  7. tools:context=".SensorTestActivity" >
  8. <LinearLayout
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:orientation="horizontal" >
  12. <Button
  13. android:id="@+id/btn_start"
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"
  16. android:layout_weight="1"
  17. android:text="播放" />
  18. <Button
  19. android:id="@+id/btn_stop"
  20. android:layout_width="fill_parent"
  21. android:layout_height="wrap_content"
  22. android:layout_weight="1"
  23. android:text="停止" />
  24. <Button
  25. android:id="@+id/btn_open"
  26. android:layout_width="fill_parent"
  27. android:layout_height="wrap_content"
  28. android:layout_weight="1"
  29. android:text="打开扬声器" />
  30. <Button
  31. android:id="@+id/btn_close"
  32. android:layout_width="fill_parent"
  33. android:layout_height="wrap_content"
  34. android:layout_weight="1"
  35. android:text="关闭扬声器" />
  36. </LinearLayout>
  37. </LinearLayout>

实现的代码:

[java] view plain
  1. package sensor.kazeik;
  2. import java.io.IOException;
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.hardware.Sensor;
  6. import android.hardware.SensorEvent;
  7. import android.hardware.SensorEventListener;
  8. import android.hardware.SensorManager;
  9. import android.media.AudioManager;
  10. import android.media.MediaPlayer;
  11. import android.os.Bundle;
  12. import android.util.Log;
  13. import android.view.View;
  14. import android.view.View.OnClickListener;
  15. import android.widget.Button;
  16. public class SensorTestActivity extends Activity implements OnClickListener,
  17. SensorEventListener {// 这里实现传感器监听
  18. /** Called when the activity is first created. */
  19. Button btn_start = null;
  20. Button btn_stop = null;
  21. Button btn_close = null;
  22. Button btn_open = null;
  23. // /mediaplaer
  24. MediaPlayer _mediaPlayer = null; // 音乐播放管理器
  25. AudioManager audioManager = null; // 声音管理器
  26. SensorManager _sensorManager = null; // 传感器管理器
  27. Sensor mProximiny = null; // 传感器实例
  28. float f_proximiny; // 当前传感器距离
  29. @Override
  30. public void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.main);
  33. btn_start = (Button) findViewById(R.id.btn_start);
  34. btn_start.setOnClickListener(this);
  35. btn_stop = (Button) findViewById(R.id.btn_stop);
  36. btn_stop.setOnClickListener(this);
  37. btn_close = (Button) findViewById(R.id.btn_close);
  38. btn_close.setOnClickListener(this);
  39. btn_open = (Button) findViewById(R.id.btn_open);
  40. btn_open.setOnClickListener(this);
  41. _mediaPlayer = new MediaPlayer();
  42. audioManager = (AudioManager) this
  43. .getSystemService(Context.AUDIO_SERVICE);
  44. _sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
  45. mProximiny = _sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
  46. }
  47. @Override
  48. protected void onResume() {
  49. // TODO Auto-generated method stub
  50. super.onResume();
  51. // 注册传感器
  52. _sensorManager.registerListener(this, mProximiny,
  53. SensorManager.SENSOR_DELAY_NORMAL);
  54. }
  55. @Override
  56. protected void onPause() {
  57. // TODO Auto-generated method stub
  58. super.onPause();
  59. // 取消注册传感器
  60. _sensorManager.unregisterListener(this);
  61. }
  62. private void playerMusic(String path) {
  63. // 重置播放器
  64. _mediaPlayer.reset();
  65. try {
  66. // 设置播放路径
  67. _mediaPlayer.setDataSource(path);
  68. // 准备播放
  69. _mediaPlayer.prepare();
  70. // 开始播放
  71. _mediaPlayer.start();
  72. } catch (IllegalArgumentException e) {
  73. // TODO Auto-generated catch block
  74. e.printStackTrace();
  75. } catch (IllegalStateException e) {
  76. // TODO Auto-generated catch block
  77. e.printStackTrace();
  78. } catch (IOException e) {
  79. // TODO Auto-generated catch block
  80. e.printStackTrace();
  81. }
  82. }
  83. private void stopPlayerMusic() {
  84. // 停止播放
  85. if (_mediaPlayer.isPlaying()) {
  86. _mediaPlayer.reset();
  87. }
  88. }
  89. /*
  90. * (non-Javadoc)
  91. *
  92. * @see android.view.View.OnClickListener#onClick(android.view.View)
  93. */
  94. @Override
  95. public void onClick(View v) {
  96. // TODO Auto-generated method stub
  97. switch (v.getId()) {
  98. case R.id.btn_close:
  99. audioManager.setMode(AudioManager.MODE_NORMAL);
  100. break;
  101. case R.id.btn_open:
  102. audioManager.setMode(AudioManager.MODE_IN_CALL);
  103. break;
  104. case R.id.btn_start:// 音乐取自于Sd卡上的音乐
  105. playerMusic("/mnt/sdcard/mp3/我很快乐.mp3");
  106. break;
  107. case R.id.btn_stop:
  108. stopPlayerMusic();
  109. break;
  110. }
  111. }
  112. /*
  113. * 实现SensorEventListener需要实现的两个方法。
  114. */
  115. @Override
  116. public void onSensorChanged(SensorEvent event) {
  117. // TODO Auto-generated method stub
  118. f_proximiny = event.values[0];
  119. Log.v("tag",
  120. "-->  " + f_proximiny + "  |  " + mProximiny.getMaximumRange());
  121. if (f_proximiny == mProximiny.getMaximumRange()) {
  122. audioManager.setMode(AudioManager.MODE_NORMAL);
  123. } else {
  124. audioManager.setMode(AudioManager.MODE_IN_CALL);
  125. }
  126. }
  127. /*
  128. */
  129. @Override
  130. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  131. // TODO Auto-generated method stub
  132. }
  133. }

到此项目完成,当我们点击播放时,则播放音乐。点击停止时,停止播放音乐。点击打开扬声器时,这里切换到用听筒听声音,点击关闭扬声器时,这里用扬声器来听声音。

同时,当我们把手机贴近耳朵时,会从听筒里听到声音,当手机离开耳朵时,切用扬声器来听声音;

利用手机距离感应器来切换是用扬声器听音乐还是听筒听音乐相关推荐

  1. 利用手机距离感应器来切换声音听筒播放或声筒播放

    一直不擅于来写文章,有时候写的东西,阅读起来,一点都不流畅,但不管如何,任何事情总有一个从0到1的过程.先写,后改.慢慢增进吧. 几年前曾写一篇文章 ,是关于利用手机距离传感器来切换听筒或声筒播放声音 ...

  2. 高通手机基带镜像解压¥混合基带制作方法。(解决手机距离感应器失效)

     一.取得基带 1-1.泛泰手机的话可以从官方卡刷包中取得 在fotamodem\NON-HLOS.bin,解压出来,扩展名改为img 1-2.也可以从当前手机中备份. 在twrp下,连接手机数据 ...

  3. 手机中的传感器:重力感应器、加速度传感器、陀螺仪、电子罗盘和光线距离感应器

    智能手机之所以受到大家的欢迎,与其具有的娱乐功能分不开,使得它不仅仅是个通话的工具.智能手机支持那么多的娱乐应用,归根结底在于它里面集成的各类传感器,主要有重力感应器.加速度传感器.陀螺仪.电子罗盘和 ...

  4. Android 距离感应器和耳机状态监测(控制Audio输出通道切换)

    * 切换扬声器播放声音 or 听筒播放  * 1. 距离感应器:继承SensorEventListener这个监听,重写onSensorChanged方法  * 2. 检测耳机插入和拔出:Headse ...

  5. 距离感应器下的休眠唤醒机制实现

    前言 从事Android framework开发已经两年了,今天起决定把工作上遇到的问题.做过的需求都用博客的形式记录一下,特地新开一个系列---Android framework开发工作记录,有需要 ...

  6. android距离感应器控制黑屏,白屏

    最近在做一个网络通话的apk,功能和手机打sim卡电话一样.虽然只做java部分,但也遇到很多问题,其中一个就是模拟通话时的状态,要控制屏幕锁屏.我知道是通过手机上的距离感应器来实现,但也搞了好久,今 ...

  7. android距离感应器控制屏幕灭屏白屏

    最近在做一个网络通话的apk,功能和手机打sim卡电话一样.虽然只做java部分,但也遇到很多问题,其中一个就是模拟通话时的状态,要控制屏幕锁屏.我知道是通过手机上的距离感应器来实现,但也搞了好久,今 ...

  8. android 距离感应器控制屏幕熄灭_苹果 | 最新折叠专利曝光!屏幕下方无铰链结构解决折痕问题...

    文 | 小C君 · 编译 | Nina.山海观 来源 :Businesspost.Appleinsider CINNO Research 产业资讯,3月10日,IT媒体9to5Mac报道,苹果当天在美 ...

  9. 距离感应器实现锁频教程

    首先说一下android平台下的11种感应器:            1. ACCELEROMETER 加速,描述加速度的.            2.GRAVITY 重力,这个在大家都知道.     ...

  10. PowerManager屏幕休眠断网与距离感应器P-Sensor

    PowerManager.java . 1.  应用程序获取PowerManager服务, 我们可以这样书写: PowerManager pm = (PowerManager) getSystemSe ...

最新文章

  1. 吴昊品游戏核心算法 Round 7 —— 熄灯游戏AI(有人性的Brute Force)(POJ 2811)
  2. 精通python设计模式-精通Python设计模式
  3. 06-基本查询-进阶一
  4. 牛津词典电子版txt_英语启蒙:推荐一款超火的英文词典app
  5. 一篇文章,可以同时拥有4份收益,你知道吗?
  6. html 音乐能连续播放吗,音乐在不同HTML页面的连续播放问题
  7. oracle 学习笔记 flashback query
  8. 怎么测试dpi测试软件,如何测试鼠标DPI?
  9. 2022-2028全球气动测试探针行业调研及趋势分析报告
  10. 网络安全工程师面试题汇总
  11. linux 下修改文件夹的用户权限和所属组,为文件建立软连接
  12. Vue的diff算法原理是什么?
  13. HDU6148 Valley Numer
  14. DWR服务器推 教程
  15. Nginx无法启动 遇见unknown directive if(!-f in E:\xiangmu\nginx-1.14.0/conf/nginx.conf:28
  16. Excel学习笔记(7.16)——offset函数、and()、or()、counta函数使用
  17. 干货福利 | “新基建”时代,数据如何驱动企业数智化升级
  18. 今天聊:2~3年前端处于离职困境与舒适区能做些什么
  19. 数据库技术与应用 学习笔记1
  20. 分页工具类——PageInfo

热门文章

  1. 解决在Windows下浏览器主页被360篡改的问题,即禁止360篡改浏览器主页
  2. apk编辑器android源码,APK编辑器
  3. 感情箴言滴水藏海(二)
  4. arch Linux更换字体,Arch Linux 安装后的设置
  5. 软件工程的6个阶段以及成果精简版
  6. 当深度学习遇见自动文本摘要
  7. 手淘双11最新实践:PopLayer弹层领域研发模式升级
  8. 2016 word 安装6.9b mathtype后,灰色不可用
  9. showVideo C#版 摄像头驱动程序
  10. bjui ajax.js,B-JUI 前端管理框架