一个从光传感器中读取数据的程序,并将其存储在sdcard文件中。如有写的不好的地方,请赐教。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class LightActivity extends Activity implements SensorEventListener{
private TextView tv_light;
private EditText et_light;
private Button buBegin;
private Button buEnd;
private Button buEnsure;//当要写入其他文件时,重新生成新的文件
private SensorManager sm;//SensorManager对象
private Sensor lightSensor;
private float[] lightValues = new float[1];//存储从传感器中读取的数据
private Timer updapteTime;
private TimerTask tt = null;
private File fi = null;//判断文件是否存在
private File fidirectory = null;//判断文件夹是否存在
private FileOutputStream fos = null;//向文件中写入数据
private Calendar myCalendar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv_light = (TextView)findViewById(R.id.tv_light);
buBegin = (Button)findViewById(R.id.buBegin);
buEnd = (Button)findViewById(R.id.buEnd);
buEnsure = (Button)findViewById(R.id.buEnsure);
et_light = (EditText)findViewById(R.id.et_light);
buBegin.setOnClickListener(new BeginClassListener());
buBegin.setVisibility(View.INVISIBLE);
buEnd.setOnClickListener(new EndClassListener());
buEnd.setVisibility(View.INVISIBLE);
buEnsure.setOnClickListener(new EnsureClassListener());
sm = (SensorManager)getSystemService(SENSOR_SERVICE);
lightSensor = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
sm.registerListener(this, lightSensor,SensorManager.SENSOR_DELAY_NORMAL);
//程序开始时初始化文件夹,程序中的数据存与此文件夹
//该方法中默认文件存储在/sdcard/book/lightargu目录
fidirectory = new File("/sdcard/");
if(!fidirectory.exists()){
fidirectory.exists();
}
fidirectory = new File("/sdcard/book/");
if(!fidirectory.exists()){
fidirectory.mkdir();
}
fidirectory = new File("/sdcard/book/lightargu");
if(!fidirectory.exists()){
fidirectory.mkdir();
}
myCalendar = Calendar.getInstance();
}
public void updateGUI(){
runOnUiThread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
tv_light.setText(lightValues[0]+"");
try {
fos.write((lightValues[0]+"\n").getBytes());
fos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Hello");
}
});
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if(tt != null))
tt.cancel();
if(updapteTime != null)
updapteTime.cancel();
sm.unregisterListener(this);
}
//传感器SensorEventListener的监听函数
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
lightValues = event.values;
}
//Button控件的监听器
class BeginClassListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
updapteTime = new Timer("Light");
tt = new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
updateGUI();
}
};
updapteTime.scheduleAtFixedRate(tt, 0, 1000);
try {
fos = new FileOutputStream(fi.getAbsolutePath(),true);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
buBegin.setVisibility(View.INVISIBLE);
buEnd.setVisibility(View.VISIBLE);
}
}
class EndClassListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
fos.write((myCalendar.getTime().toString()+"\n").getBytes());
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tt.cancel();
updapteTime.cancel();
//updapteTime.purge();
buBegin.setVisibility(View.VISIBLE);
buEnd.setVisibility(View.INVISIBLE);
}
}
class EnsureClassListener implements OnClickListener{
@Override
public void onClick(View v) {
String evlightstr = et_light.getText().toString();
if(!evlightstr.equals("")){
String filestr = "";
filestr += "/sdcard/book/lightargu/"+et_light.getText().toString();
if(!filestr.contains(".")){
filestr+= "hw.txt";
fi = new File(filestr);
if(!fi.exists()){
System.out.println("creating it");
try{
fi.createNewFile();
Toast.makeText(LightActivity.this, "File isn't exits.Now,create it.", Toast.LENGTH_LONG).show();
}catch(IOException e){
Toast.makeText(LightActivity.this, "新建文件失败!", Toast.LENGTH_LONG).show();
e.printStackTrace();
System.out.println(e.toString());
finish();
}
}else{
Toast.makeText(LightActivity.this, "文件存在!", Toast.LENGTH_LONG).show();
}
buBegin.setVisibility(View.VISIBLE);
}else{
et_light.setText("文件名不正确,有非法符号或者错误信息");
}
}else{
Toast.makeText(LightActivity.this, "输入文件名空,重输入!", Toast.LENGTH_LONG).show();
}
}
}