我的手機從一開始就有通話中誤觸擴音鍵或者消音鍵的困擾,手機客服跟我說只要通話中靠近手機螢幕,螢幕就會自動關掉,離開後螢幕又會打開,聽起來很完美,但是我一直用得很不順,時好時不好,不好的時候尤多。
書上說靠近關螢幕,離開開螢幕的神奇功能在於手機有「距離感應器」,今天寫程式來測試一下,果然,神腦給我貼的保護貼就是元兇,網路上說保護貼要在距離感應器的地方留洞才行,我的保護貼只有一個洞,鏡頭的,喵的!
ProximityActivity
public class ProximityActivity extends Activity implements SensorEventListener { private static final String TAG = "ProximityActivity"; private SensorManager mgr; private Sensor proximity; private Vibrator vibrator; private float lastVal = -1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.d(ProximityActivity.TAG, "onCreate..."); // Android 所有的感應器的統一介面 this.mgr = (SensorManager) this.getSystemService(SENSOR_SERVICE); // 取得距離感應器 this.proximity = this.mgr.getDefaultSensor(Sensor.TYPE_PROXIMITY); // 用振動來反應距離的變化 this.vibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE); } @Override protected void onResume() { super.onResume(); Log.d(ProximityActivity.TAG, "registerListener..."); // 一定要在這註冊 this.mgr.registerListener(this, this.proximity, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); Log.d(ProximityActivity.TAG, "unregisterListener..."); // 一定要在這解註冊 this.mgr.unregisterListener(this, this.proximity); } @Override public void onSensorChanged(SensorEvent event) { Log.d(ProximityActivity.TAG, "onSensorChanged..."); // 目前的距離 float thisVal = event.values[0]; if (this.lastVal == -1) { // 第一次進來 this.lastVal = thisVal; } else { if (thisVal < this.lastVal) { // 接近長振動 this.vibrator.vibrate(1000); } else { // 離開短振動 this.vibrator.vibrate(100); } this.lastVal = thisVal; } String msg = "Current val: " + this.lastVal; Log.d(ProximityActivity.TAG, msg); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }記得振動要加上 android.permission.VIBRATE 這個權限。
振動和距離感應器都要安裝到手機上才會運作。
沒有留言:
張貼留言