android 利用重力感应监听 来电时翻转手机后静音。
在CallNotifier.java中 加入如下代码:
public void GetSensorManager(Context context) {
sm = (SensorManager) context
.getSystemService(Service.SENSOR_SERVICE);
sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mySensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
x = event.values[0];
y = event.values[1];
z = event.values[2]; if (x < 1 && x > -1 && y < 1 && y > -1) { if (z > 0) {
mGoUp = true; } else { mGoUp = false;
} } else {
// if (x > 1 || x < -1 || y > 1 || y < -1 ) { if ( z > 0 && !mGoUp ) {
mRinger.stopRing();
if(mySensorListener != null){
sm.unregisterListener(mySensorListener); //Add by kylin 2013.07.25 }
}
if ( z < 0 && mGoUp ) {
mRinger.stopRing();
if(mySensorListener != null){
sm.unregisterListener(mySensorListener); //Add by kylin 2013.07.25
}
} // } } } @Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub }
};
sm.registerListener(mySensorListener, sensor,
SensorManager.SENSOR_DELAY_GAME); }
再在相应位置调用如上方法即可以实现此功能。 重力感应单个实例下载:http://download.csdn.net/detail/wangqilin8888/5819679
- public class ShakeListener implements SensorEventListener {
- public static ShakeListener sensor1;
- // 速度阈值,当摇晃速度达到这值后产生作用
- private static final int SPEED_SHRESHOLD = 400;
- // 两次检测的时间间隔
- private static final int UPTATE_INTERVAL_TIME = 70;
- // 传感器管理器
- private SensorManager sensorManager;
- // 传感器
- private Sensor sensor;
- // 重力感应监听器
- private OnShakeListener onShakeListener;
- // 上下文
- private static Context context;
- // 手机上一个位置时重力感应坐标
- private float lastX;
- private float lastY;
- private float lastZ;
- // 上次检测时间
- private long lastUpdateTime;
- public static ShakeListener newInstance(Context c) {
- if (sensor1 == null) {
- sensor1 = new ShakeListener();
- context = c;
- return sensor1;
- } else {
- return sensor1;
- }
- }
- // 开始
- public void start() {
- // 获得传感器管理器
- if(sensorManager==null){
- sensorManager = (SensorManager) context
- .getSystemService(Context.SENSOR_SERVICE);
- }
- if (sensorManager != null&&sensor==null) {
- // 获得重力传感器
- sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- }
- if (sensor != null) {
- sensorManager.registerListener(this, sensor,
- SensorManager.SENSOR_DELAY_NORMAL);
- }
- }
- // 停止检测
- public void stop() {
- sensorManager.unregisterListener(this);
- }
- // 摇晃监听接口
- public interface OnShakeListener {
- public void onShake();
- }
- // 设置重力感应监听器
- public void setOnShakeListener(OnShakeListener listener) {
- onShakeListener = listener;
- }
- // 重力感应器感应获得变化数据
- @Override
- public void onSensorChanged(SensorEvent event) {
- long currentUpdateTime = System.currentTimeMillis();
- // 两次检测的时间间隔
- long timeInterval = currentUpdateTime - lastUpdateTime;
- // 判断是否达到了检测时间间隔
- if (timeInterval < UPTATE_INTERVAL_TIME) {
- return;
- }
- // 现在的时间变成last时间
- lastUpdateTime = currentUpdateTime;
- // 获得x,y,z坐标
- float x = event.values[0];
- float y = event.values[1];
- float z = event.values[2];
- // 获得x,y,z的变化值
- float deltaX = x - lastX;
- float deltaY = y - lastY;
- float deltaZ = z - lastZ;
- // 将现在的坐标变成last坐标
- lastX = x;
- lastY = y;
- lastZ = z;
- double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
- * deltaZ)
- / timeInterval * 10000;
- // 达到速度阀值,发出提示
- if (speed >= SPEED_SHRESHOLD){
- // 手机晃动
- onShakeListener.onShake();
- }
- }
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- }
android 利用重力感应监听 来电时翻转手机后静音。的更多相关文章
- cocos2d-x JS 重力感应监听事件
说明 : 下面监听中的 acc属性 里面有很多可以使用的值 . 添加监听 : cc.inputManager.setAccelerometerEnabled(true); cc.eventManage ...
- Android监听来电和去电
要监听android打电话和接电话,只需下面2步骤1.第一步,写一个Receiver继承自BroadcastReceiver import android.app.Service; import an ...
- Android EditText截获与监听输入事件
Android EditText截获与监听输入事件共有2种方法: 1.第一种方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件. edittext.setOnKeyLi ...
- IOS使用AVAudioPlayer播放mp3歌曲文件并监听来电打断
本实例实现了AVAudioPlayer播放mp3歌曲文件,实现了播放.暂停.继续操作,音乐音量控制.播放进度显示,同时监听来电打断事件 一.控件初始化 - (void)viewDidLoad { [s ...
- Unity中利用委托与监听解耦合的思路
这篇随笔是一篇记录性的随笔,记录了从http://www.sikiedu.com/my/course/304,这门课程中学到的内容,附带了一些自己的思考. 一.单例模式的应用 首先假想一种情况,现在需 ...
- android电话状态的监听
电话状态的监听: /*** * 继承PhoneStateListener类,我们能够又一次其内部的各种监听方法 然后通过手机状态改变时,系统自己主动触发这些方法来实现我们想要的功能 */ class ...
- Android addTextChangedListener(文本监听)参数解释及实现EditText字数监听
由于最近做项目要检测EditText中输入的字数长度,从而接触到了Android中EditText的监听接口,TextWatcher.它有三个成员方法,第一个after很简单,这个方法就是在EditT ...
- Android Back Home键监听
Android Back Home键监听 Back键的监听 对于Back键的监听比较容易,可以在多个系统回调处拦截,比如在activity的下列方法中都可以收到Back键按下的事件: @Overrid ...
- Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17761431),请尊重他人的辛勤劳动成果,谢谢! 我之前写 ...
随机推荐
- 滚动页面时DIV到达顶部时固定在顶部
本示例使用Javascript实现了滚动页面时,DIV到达顶部时固定在顶部.在IE下效果有点闪,效果网址:http://www.keleyi.com/keleyi/phtml/fixdiv.htm 下 ...
- 网页中flash背景透明
<embed src="文件路径" width="长度" height="宽度" quality="high" t ...
- excel筛选两列值是否相同,如果相同返回第三列值
见图:
- 安装 adobe flash player
安装方法: 1. 下载Adobe Flash Player: http://fpdownload.macromedia.com/get/flashplayer/pdc/11.2. ...
- 【转】ios开发之生成所缩略图方式
亲测:两种方式都有效 第一种方式:缩略成固定的尺寸大小 - (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSiz ...
- 如何在word中写出赏心悦目的代码
短学期的VHDL终于结束了,虽然代码并不是很难,但是框框条条的规矩很多,也算折腾了一会,最后要写一个技术手册,结题报告类似物.考虑到word毕竟套主题比较方便,所以也就没有用LaTeX写,但是很快就发 ...
- 【转】嵌入式Linux学习笔记
一 嵌入式系统定义: 应用于特定环境的硬件体系. 二 两样非常重要的能力: 1. 掌握各种新概念的能力 2. 调试的能力( 包括软件, 硬件 ) 三 需要的基础知识: 1. 操作系统理论基 ...
- POJ 2986 A Triangle and a Circle
题意:给定一个三角形,以及一个圆的圆心坐标和半径,求圆和三角形的相交面积. 思路: 用三角剖分,三角形上每个线段都变成这个线段与圆心的三角形,然后算出每个三角形与圆的相交面积,然后根据有向面积的正负累 ...
- 蓝牙芯片NRF51822入门学习1:时间管理
前言 之前辞职找工作的时候发现,很多公司希望招聘蓝牙技术方面的人才,所以干脆丢开LWIP静下心来学习蓝牙技术.原本以为一两星期能基本学会的,谁知道所选的蓝牙芯片nrf51822是个坑货,坑了我一个月. ...
- 粗窥STARTUP.A51和INIT.A51
也许大家曾经注意过使用Keil C51来编译链接生成目标代码之后,在我们的主程序之前有些代码不是我们写的,它们从哪里来的? Keil C51的\C51\LIB目录下有STARTUP.A51和INIT. ...