我刚开始学安卓。我开发了一个名为android光传感器的程序来测量光的强度。这是我的代码:

    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光传感器已经停止”。
请帮助!!

最佳答案

有一个明显的错误。
如果在findViewById之前使用setContentView(R.layout.main);,则返回的值为空。
当你试图使用它们时,你会得到一个错误。
把这两行写在setContentView(R.layout.main);

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

关于android - 如何获取光传感器的特定值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20609370/

10-09 06:40