zoukankan      html  css  js  c++  java
  • 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

      


    android 重力感应监听

    1. public class ShakeListener implements SensorEventListener {  
    2.     public static ShakeListener sensor1;  
    3.     // 速度阈值,当摇晃速度达到这值后产生作用  
    4.     private static final int SPEED_SHRESHOLD = 400;  
    5.     // 两次检测的时间间隔  
    6.     private static final int UPTATE_INTERVAL_TIME = 70;  
    7.   
    8.     // 传感器管理器  
    9.     private SensorManager sensorManager;  
    10.     // 传感器  
    11.     private Sensor sensor;  
    12.     // 重力感应监听器  
    13.     private OnShakeListener onShakeListener;  
    14.     // 上下文  
    15.     private static Context context;  
    16.     // 手机上一个位置时重力感应坐标  
    17.     private float lastX;  
    18.     private float lastY;  
    19.     private float lastZ;  
    20.   
    21.     // 上次检测时间  
    22.     private long lastUpdateTime;  
    23.   
    24.   
    25.       
    26.   
    27.     public static ShakeListener newInstance(Context c) {  
    28.         if (sensor1 == null) {  
    29.             sensor1 = new ShakeListener();  
    30.             context = c;  
    31.             return sensor1;  
    32.         } else {  
    33.             return sensor1;  
    34.         }  
    35.     }  
    36.   
    37.     // 开始  
    38.     public void start() {  
    39.         // 获得传感器管理器  
    40.         if(sensorManager==null){  
    41.             sensorManager = (SensorManager) context  
    42.             .getSystemService(Context.SENSOR_SERVICE);    
    43.         }  
    44.         if (sensorManager != null&&sensor==null) {  
    45.             // 获得重力传感器  
    46.             sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  
    47.         }  
    48.         if (sensor != null) {  
    49.             sensorManager.registerListener(this, sensor,  
    50.                     SensorManager.SENSOR_DELAY_NORMAL);  
    51.         }  
    52.     }  
    53.   
    54.   
    55.   
    56.     // 停止检测  
    57.     public void stop() {  
    58.         sensorManager.unregisterListener(this);  
    59.     }  
    60.   
    61.     // 摇晃监听接口  
    62.     public interface OnShakeListener {  
    63.         public void onShake();  
    64.     }  
    65.   
    66.     // 设置重力感应监听器  
    67.     public void setOnShakeListener(OnShakeListener listener) {  
    68.         onShakeListener = listener;  
    69.     }  
    70.   
    71.     // 重力感应器感应获得变化数据  
    72.     @Override  
    73.     public void onSensorChanged(SensorEvent event) {  
    74.   
    75.         long currentUpdateTime = System.currentTimeMillis();  
    76.         // 两次检测的时间间隔  
    77.         long timeInterval = currentUpdateTime - lastUpdateTime;  
    78.         // 判断是否达到了检测时间间隔  
    79.         if (timeInterval < UPTATE_INTERVAL_TIME) {  
    80.             return;  
    81.         }  
    82.         // 现在的时间变成last时间  
    83.         lastUpdateTime = currentUpdateTime;  
    84.   
    85.         // 获得x,y,z坐标  
    86.         float x = event.values[0];  
    87.         float y = event.values[1];  
    88.         float z = event.values[2];  
    89.   
    90.         // 获得x,y,z的变化值  
    91.         float deltaX = x - lastX;  
    92.         float deltaY = y - lastY;  
    93.         float deltaZ = z - lastZ;  
    94.   
    95.         // 将现在的坐标变成last坐标  
    96.         lastX = x;  
    97.         lastY = y;  
    98.         lastZ = z;  
    99.   
    100.         double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ  
    101.                 * deltaZ)  
    102.                 / timeInterval * 10000;  
    103.         // 达到速度阀值,发出提示  
    104.         if (speed >= SPEED_SHRESHOLD){  
    105.             // 手机晃动  
    106.             onShakeListener.onShake();  
    107.         }  
    108.     }  
    109.     public void onAccuracyChanged(Sensor sensor, int accuracy) {  
    110.   
    111.     }  
    112.   
    113. }  


      



  • 相关阅读:
    PyMySQL学习笔记
    Python 操作csv和excel表格
    Python爬虫之解析网页
    Python爬虫的简单入门(一)
    利用赫夫曼编码进行在线密码对话
    Markdown使用笔记
    SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理)
    decimal与float和double的区别
    dev、test、pre和prod是什么意思?
    bat代码中判断 bat是否是以管理员权限运行,以及自动以管理员权限运行CMD BAT
  • 原文地址:https://www.cnblogs.com/aukle/p/3221843.html
Copyright © 2011-2022 走看看