Android 通过SensorManager可获取手机相对位置,然后通过AudioManager修改手机模式,代码较为简单,具体代码如下,相关代码已给出注释。打开软件后若正面朝上则设置正常模式,朝下则设置震动模式。

手机通过重力感应获取相对自身的坐标,而不是空间坐标,然后通过自身坐标判断自身位置,其原理图如下:

如何判断手机相关位置具体内容本文不做介绍,可自行百度相关内容。本例全部代码如下,若需demo可在文章底部给出链接自行下载。

package com.example.changephonemode;import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.AudioManager;
import android.os.Bundle;
import android.os.Vibrator;
import android.widget.TextView;public class MainActivity extends Activity {private SensorManager mSensorManager;private TextView mTextView;private int strRingerMode;// 存储AudioManager模式@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTextView = (TextView) findViewById(R.id.mytxt);try {/** 获取SENSOR_SERVICE服务 在1.5的AVD模拟器中会死机*/mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);} catch (Exception e) {e.printStackTrace();}GetAudioManagerMode();setTextViewValue();}@Overrideprotected void onResume() {mSensorManager.registerListener(mSensorListener,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);super.onResume();}@Overrideprotected void onPause() {mSensorManager.unregisterListener(mSensorListener);super.onPause();}// 设置文字内容public void setTextViewValue() {switch (strRingerMode) {case AudioManager.RINGER_MODE_NORMAL:mTextView.setText("正常模式");break;case AudioManager.RINGER_MODE_SILENT:mTextView.setText("静音模式");break;case AudioManager.RINGER_MODE_VIBRATE:mTextView.setText("震动模式");break;default:break;}}private final SensorEventListener mSensorListener = new SensorEventListener() {private float x, y, z;@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stubsynchronized (mSensorManager) {switch (event.sensor.getType()) {case Sensor.TYPE_ACCELEROMETER:x = event.values[0];y = event.values[1];z = event.values[2];if (z > 9) {/* 正面向上,改为正常模式 */ChangeToNormaoMode();setTextViewValue();} else if (z < -9) {/* 正面向上,先设置静音模式,再设置震动模式 */ChangeToSilentMode();ChangeToVobrateMode();setTextViewValue();} else if (x > 9) {/* 正面向左 */} else if (x < -9) {/* 正面向右 */} else if (y > 9) {/* 手掌正翻向自己直立 */} else if (y < -9) {/* 手掌反翻背向自己直立 */} else {/* 无法判断情况 */}break;}}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}};// 改为正常模式private void ChangeToNormaoMode() {try {AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);if (audioManager != null) {/** strRingerMode的值为: RINGER_MODE_NORMAL RINGER_MODE_SILENT* RINGER_MODE_VIBRATE*/audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);strRingerMode = audioManager.getRingerMode();}} catch (Exception e) {mTextView.setText(e.toString());e.printStackTrace();}}// 改为静音模式private void ChangeToSilentMode() {try {AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);if (audioManager != null) {/** strRingerMode的值为: RINGER_MODE_NORMAL RINGER_MODE_SILENT* RINGER_MODE_VIBRATE*/audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);strRingerMode = audioManager.getRingerMode();}} catch (Exception e) {mTextView.setText(e.toString());e.printStackTrace();}}// 改为震动模式private void ChangeToVobrateMode() {try {AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);if (audioManager != null) {/** strRingerMode的值为: RINGER_MODE_NORMAL RINGER_MODE_SILENT* RINGER_MODE_VIBRATE*/audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);strRingerMode = audioManager.getRingerMode();}} catch (Exception e) {mTextView.setText(e.toString());e.printStackTrace();}}private void GetAudioManagerMode() {try {AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);if (audioManager != null) {/** strRingerMode的值为: RINGER_MODE_NORMAL RINGER_MODE_SILENT* RINGER_MODE_VIBRATE*/strRingerMode = audioManager.getRingerMode();}} catch (Exception e) {mTextView.setText(e.toString());e.printStackTrace();}}}

Demo下载

Android 利用重力感应调整手机模式相关推荐

  1. android 利用重力感应监听 来电时翻转手机后静音。

       在CallNotifier.java中 加入如下代码: public void GetSensorManager(Context context) {sm = (SensorManager) c ...

  2. Android 之重力感应

    Android系统支持重力感应,可以利用手机的移动.翻转来实现更为有趣的程序,在这里介绍一种在模拟器上模拟重力感应的工具(sersorsimulator), 这个工具分为服务器端和客户端,服务器是一个 ...

  3. android修改重力感应方向

    在这里简要的为大家介绍一下我曾经改过android手机重力感应的一点知识... 首先,大家要android手机重力感应,那么必须得有你自己机器的源代码吧, 开始在网上找到蛮多资料,但是按其所说并不能实 ...

  4. Android 屏幕重力感应

    由于重力感应器在板上安装的方向不同,而移植时需要调整相关的代码. 解决屏幕显示颠倒相关问题,相关的有两部分代码: 1. 内核重力感应器驱动部分,如 MMA7660 1 vi drivers/input ...

  5. Android 利用方向传感器获得手机的相对角度

    1.android 的坐标系是如何定义x, y z 轴的. x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较短的边需要水平放置,较长的边需要垂直放置. Y轴的方向是从屏幕的左下角开始 ...

  6. Android利用方向传感器获得手机的相对角度实例说明

    1.android 的坐标系是如何定义x, y z 轴的 x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较短的边需要水平放置,较长的边需要垂直放置. Y轴的方向是从屏幕的左下角开始沿 ...

  7. Android利用云盘实现手机上传功能

    http://blog.csdn.net/Tardis1/article/details/50966844,本人地址. 做毕业设计的时候,需要将抓取的tcp.udp报文上传到用户的网盘,不知道是我关键 ...

  8. Android根据重力感应选装方向,四个方向都支持

    不废话,直接上源码: 辅助工具类ChangeOrientationHandler.java public class ChangeOrientationHandler extends Handler ...

  9. android手机重力感应例子

    手机重力感应实现简单介绍 现在有很多游戏是通过摇晃手机实现的,比如赛车游戏 摇骰子游戏 迷宫游戏 等等 . 今天我用简单的代码为大家介绍一下android 下重力感应的实现方式 下面是一个模拟器的屏幕 ...

  10. Android 手机重力感应实现简单介绍

    手机重力感应实现简单介绍            现在有很多游戏是通过摇晃手机实现的,比如赛车游戏 摇骰子游戏 迷宫游戏 等等 . 今天我用简单的代码为大家介绍一下android 下重力感应的实现方式 ...

最新文章

  1. windowsclient开发--为你的client进行国际化
  2. 【元气云妹】有趣有料的云吞铺子,来一碗吗?
  3. 如何使用Microsoft技术栈
  4. 山西上党残疾男子“只”手脱贫 带领村民增收
  5. mysql查询流程解析及重要知识总结
  6. python从入门到精通 pdf 完整超清版-Python从入门到精通PDF高清完整版免费下载|百度云盘...
  7. 机器学习基础:极大似然估计(Machine Learning Fundamentals: Maximum Likelihood Estimation)
  8. 正则表达式(待补充)
  9. 问题:html中的select的options的用法?
  10. 入侵html数据库,教你如何暴库(网站入侵)
  11. 怎么拆分PDF文档?一分钟学会拆分PDF文档的方法
  12. 剑指Offer 09.用两个栈实现队列(LIFO与FIFO)
  13. 【C语言典例】——day4:加油站加油【Switch】
  14. 精简配置的虚拟磁盘在快照删除过程中膨胀为更大的大小(56608)
  15. X3D代码理解之demo(cfg)
  16. 读数据库版本的、利用K-means聚类方法做经纬度聚合
  17. php网线入侵,普通网线能poe供电吗
  18. 阿里云HaaS100物联网开发板学习笔记(二)硬件控制初步--让小灯闪烁起来
  19. 服务器系统盘划分,服务器硬盘分区的划分c区系统区.doc
  20. Python 一键获取全国市县级行政单元Shapefile文件

热门文章

  1. Monkey测试个人笔记
  2. 软件测试基础概念(二)测试环
  3. css字号 h5_css——移动端h5不支持font-family里面的楷体、微软雅黑等字体
  4. UART(Universal Asynchronous Receiver/Transmitter)
  5. 论文翻译:2021_TSCN:Decoupling magnitude and phase optimization with a two-stage deep network
  6. office Word中手动添加MathType插件
  7. MSSQL 2000安装 图解
  8. HashSet源码解读
  9. ZigBee技术有哪些应用领域?
  10. alpha 冲刺 —— 十分之一