2013-12-16 52 views
2

我刚开始学习android。我开发了一个名为Android Light Sensor的程序,用于测量光的强度。这里是我的代码:如何获取光传感器的具体数值

package com.AndroidLightSensor; 

import com.example.andriodlightsensor.R; 

import android.os.Bundle; 
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.view.View; 
import android.widget.Button; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 

public class AndriodLightSensorActivity extends Activity { 

    ProgressBar lightMeter; 
    TextView textMax, textReading; 
    float counter; 
    Button read; 
    TextView display; 

     /** Called when the activity is first created. */ 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
     counter = 0; 
     read = (Button) findViewById(R.id.bStart); 
     display = (TextView) findViewById(R.id.tvDisplay); 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      lightMeter = (ProgressBar)findViewById(R.id.lightmeter); 
      textMax = (TextView)findViewById(R.id.max); 
      textReading = (TextView)findViewById(R.id.reading); 

      SensorManager sensorManager 
      = (SensorManager)getSystemService(Context.SENSOR_SERVICE); 
      Sensor lightSensor 
      = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 

      if (lightSensor == null){ 
      Toast.makeText(AndriodLightSensorActivity.this, 
       "No Light Sensor! quit-", 
       Toast.LENGTH_LONG).show(); 
      }else{ 
      float max = lightSensor.getMaximumRange(); 
      lightMeter.setMax((int)max); 
      textMax.setText("Max Reading(Lux): " + String.valueOf(max)); 

      sensorManager.registerListener(lightSensorEventListener, 
       lightSensor, 
       SensorManager.SENSOR_DELAY_NORMAL); 

      } 
     } 

    SensorEventListener lightSensorEventListener 
     = new SensorEventListener(){ 

     @Override 
     public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

     } 

     @Override 
     public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 
     if(event.sensor.getType()==Sensor.TYPE_LIGHT){ 
     final float currentReading = event.values[0]; 
     lightMeter.setProgress((int)currentReading); 
     textReading.setText("Current Reading(Lux): " + String.valueOf(currentReading)); 
     read.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       display.setText("" + String.valueOf(currentReading)); 
      } 
     }); 

     } 
     } 

     }; 
    } 

还是XML是:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/tvDisplay" 

    /> 
<ProgressBar 
    android:id="@+id/lightmeter" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="80dp" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:max="100" 
    android:progress="0" 
    /> 
<TextView 
    android:id="@+id/max" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"  
    /> 
<TextView 
    android:id="@+id/reading" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 

    /> 
<Button 
    android:layout_width="250dp" 
    android:layout_height="wrap_content" 
    android:text="Start" 
    android:layout_y="249dp" 
    android:textSize="30dp" 
    android:onClick="onButtonDown" 
    android:id="@+id/bStart" 
    ></Button> 

</LinearLayout> 

我想,每当我按下按钮来获得当前值;我:价值不应该改变(像停止观察,但更新应取代前一个)。在Eclipse中,它没有显示任何错误,但是当我在设备上运行时说:“不幸的是,Android Light Sensor已停止。” 请帮忙!!

回答

2

有一个明显的错误。
如果在setContentView(R.layout.main);之前使用findViewById,则返回值为空。
当您尝试使用它们时出现错误。

把这两条线后setContentView(R.layout.main);

read = (Button) findViewById(R.id.bStart); 
display = (TextView) findViewById(R.id.tvDisplay);