編輯:關於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) { } }
Activity或View類的onTouchEvent()回調函數會接收到touch事件。一個完整的手勢是從ACTION_DOWN開始,到ACTION_UP結束。簡單的情
可伸縮的矢量圖片不會丟失清晰度,並且單一顏色的app-icon是完美的可定義一個bitmap作為透明度(alpha)和運行時的顏色可對一個bitmap image取色,會
Android中所有控件(也稱組件)都繼承自adnroid.view.View類,android.view.ViewGroup是View類的重要子類,絕大多書的布局類就繼
Intent簡介Android中提供了Intent機制來協助應用間的交互與通訊,Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根