Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 利用重力感應監聽 來電時翻轉手機後靜音

android 利用重力感應監聽 來電時翻轉手機後靜音

編輯:關於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); 
         
    } 

 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);
  
 }

    
    再在相應位置調用如上方法即可以實現此功能。              

 

 


android 重力感應監聽:

 

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) { 
 
    } 
 
} 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved