anroid中實現距離傳感器來控制屏幕的亮滅

一、今日的任務安排:
    1. 瞭解下什麼是傳感器,傳感器的分類,傳感器在手機中的應用有哪些等等;
    2.  編寫出來較爲簡單的距離傳感器的demo並能實現基本的功能;

二、思路方法:
    傳感器編寫的步驟:
       1. 通過getSystemService獲得SensorManager實例對象
             mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
       2. 通過SensorManager實例對象獲得想要的傳感器對象:參數決定獲取哪個傳感器
               mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
       3. 在獲得焦點時註冊傳感器並讓本類實現SensorEventListener接口;
       4. 必須重寫的兩個方法:onAccuracyChanged,onSensorChanged

三、 代碼編寫
    1. 首先在androidManifest文件中申請權限;
          <uses-permission android:name="android.permission.DEVICE_POWER"/>
          <uses-permission android:name="android.permission.WAKE_LOCK"/>

          第一個權限加到xml文件中時會報錯,但是我會很利索的去clean掉,實現步驟:找到eclipse中的菜單選項project  --> clean,選擇當前項目就ok。
    2. 佈局文件中只有xml文件即可;
    3. java類文件的編寫:
   public class MainActivity extends Activity implements SensorEventListener {
    public static final String TAG = "SensorTest";
    //調用距離傳感器,控制屏幕
    private SensorManager mManager;//傳感器管理對象
    //屏幕開關
    private PowerManager localPowerManager = null;//電源管理對象
    private PowerManager.WakeLock localWakeLock = null;//電源鎖
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        mManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        //獲取系統服務POWER_SERVICE,返回一個PowerManager對象
    }
    public void onResume(){
        super.onResume();
        mManager.registerListener(this, mManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),// 距離感應
        SensorManager.SENSOR_DELAY_NORMAL);//註冊傳感器,第一個參數爲距離監聽器,第二個是傳感器類型,第三個是延遲類型
    }
    public void onStop(){
        super.onStop();
        Log.d(TAG,"on stop");
    }
    public void onDestroy(){
        super.onDestroy();
        Log.d(TAG,"on destroy");
        if(mManager != null){
           mManager.unregisterListener(this);//註銷傳感器監聽
        }
    }
    @Override
    public void onSensorChanged(SensorEvent event) {
        float[] its = event.values;
     
        //Log.d(TAG,"its array:"+its+"sensor type :"+event.sensor.getType()+" proximity type:"+Sensor.TYPE_PROXIMITY);
        if (its != null && event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
            //經過測試,當手貼近距離感應器的時候its[0]返回值爲0.0,當手離開時返回1.0
             tv .setText(its[0].toString[]);
            }
        }
    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO 自動生成的方法存根
    }
}

四、 功能說明:
     做的是距離傳感器,通過距離傳感器來控制屏幕的亮滅,當距離爲0是則屏幕暗,字符串顯示爲0;
                    當距離超過設定的閾值爲1時則屏幕亮,字符串顯示爲1。

五、 遇到的困境
     在屏幕滅掉的時候根本看不到距離感應的顯示,這時將屏幕暗的級別改的相對低一些,使屏幕仍是白色的;
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章