2015-01-07 68 views
1

我想使用Sensor.Type_Light或光線傳感器來檢測event.values [0]中的變化。Android光傳感器檢測顯着的光線變化

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (event.sensor.getType()== Sensor.TYPE_LIGHT) { 
     debugView = (TextView)findViewById(R.id.lightValue); 
     debugView.setText("Detecting...." +event.values[0]); 
    } 

正如您所看到的,這些值顯示在TextView中。此外,我們知道,如果event.values [0]爲0,則沒有光線,並且隨着光線的增加,值也會增加。 現在我的問題是:如何使用這個event.values [0]來檢測光線的明顯變化,即如果我在適當的光線下激活了我的傳感器(event.values [0]> 15),它應該能夠在燈熄滅時觸發事件(event.values [0] < 3),反之亦然。

在此先感謝

我試着在onSensorChanged以下,但似乎沒有任何工作。

if(event.values[0] >= 0 && event.values[0] <5) { 
    // No Light 
    if(event.values[0] > 10) { 
     callForHelp(); 
    } 
} 
else { 
    if(event.values[0] > 15) { 
     // Light On 
     if(event.values[0] < 5) { 
      callForHelp(); 
     } 
    } 
} 
+0

「看起來沒什麼用」 - 你究竟是什麼意思?此外,你的第一個條件是從0到5的值,然後你檢查值> 10,這永遠不會是真的。與第二個條件相同,您檢查的值大於15,然後在內部的值小於5,這再也不會是真的。首先簡化你的條件。 – Melquiades

+0

哦,是的..我明白了。再次嘗試,Thankz – asdec90

回答

0

onSensorChanged(),你爲什麼不這樣做,你說什麼,你想:

if (event.values[0] > 15) { 
    trigger_some_event(); 
} 
else if (event.values[0] < 3) { 
    trigger_another_event(); 
} 
+0

我試過了,沒有什麼似乎工作。請參考我上面編輯的問題以獲取我嘗試的代碼。 – asdec90

+0

你有沒有嘗試過嗎?如果條件有缺陷,請參閱我的評論... – Melquiades

0

你的問題是,你只希望當有顯著的變化作出反應。

只需檢查onChanged方法中的值的解決方案將不起作用,因爲從值「3」到值「0」的更改不是重大更改,但會被檢測到。

你需要的只是一個變量來記住前一個燈光事件的值。

聲明上的活動範圍(而不是事件回調內部)一個變量,並調用它像「previousLightValue」

然後在onSensorChanged方法,你可以event.values比較[0]到previousLightValue變量,只如果變化高於您決定的某個閾值,則「作出反應」。

您還可以檢查自上次測量以來該值是否下降或上升,告訴您光線現在是較亮還是較暗。

請記住,您需要初始化「beforeLightValue」變量,然後才能將其用於比較。因此,請檢測onSensorChanged事件的第一次發生,並且只將值存儲在「previousLightValue」中,而不執行檢查。從那以後,你很好走。

0

=> XML文件格式,以顯示圖像在屏幕上

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <ImageView 
      android:id="@+id/imgWallpaper" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:padding="5dp" 
      android:src="@drawable/ic_img" /> 
    </RelativeLayout> 

=>活動代碼

import android.app.Activity; 
    import android.content.Context; 
    import android.hardware.Sensor; 
    import android.hardware.SensorEvent; 
    import android.hardware.SensorEventListener; 
    import android.hardware.SensorManager; 
    import android.os.Bundle; 
    import android.widget.ImageView; 
    public class WallpaperChangeByLight extends Activity { 
     SensorManager sensorManager = null; 
     Sensor light = null; 
     float sensorValue = -1; 
     ImageView imgView = null; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.content_main); 
      imgView = (ImageView) findViewById(R.id.imgWallpaper); 
      sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE); 
      light = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 
      sensorManager.registerListener(new SensorEventListener() { 
       @Override 
       public void onSensorChanged(SensorEvent event) { 
        if (event.sensor.getType() == Sensor.TYPE_LIGHT) { 
         if (event.values[0] < 3 || event.values[0] > 15) { 
          sensorValue = event.values[0]; 
         } 
         if (sensorValue < 3) { 
          imgView.setImageDrawable(getDrawable(R.drawable.ic_nolight)); 
         } else { 
          imgView.setImageDrawable(getDrawable(R.drawable.ic_light)); 
         } 
        } 
       } 
       @Override 
       public void onAccuracyChanged(Sensor sensor, int accuracy) { 
       } 
      }, light, SensorManager.SENSOR_DELAY_NORMAL); 
     } 

    } 

不要忘記把抽拉IMAGES(ic_nolight.png,ic_light.png)