该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我是用真机开发的,在我手机上会偶尔闪退,在其他手机上会出现点进去就闪退 很不稳定,初学android,不知道什么情况,很苦恼,希望大家能帮助我下。我把代码贴一下。
package com.example.acceleration;
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.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class MainActivity extends Activity {
TextView t1, t2, t3;
// 两次检测的时间间隔
private static final int UPTATE_INTERVAL_TIME = 100;
;
private static final int SPEED_SHRESHOLD = 400;
// 传感器管理器
private SensorManager sensorManager;
// 传感器
private Sensor accelerometerSensor, gravitySensor, linearAccelerationSensor;
SensorDemo SensorDemo1, SensorDemo2, SensorDemo3;
public int flag=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//开启按钮
Button button1 = (Button)findViewById(R.id.start);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SensorDemo1.register();
SensorDemo2.register();
SensorDemo3.register();
}
});
t1 = (TextView) findViewById(R.id.t1);
t2 = (TextView) findViewById(R.id.t2);
t3 = (TextView) findViewById(R.id.t3);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
SensorDemo1 = new SensorDemo(sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), t1, 1);
SensorDemo2 = new SensorDemo(sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY), t2, 2);
SensorDemo3 = new SensorDemo(sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), t3, 3);
//终止按钮
Button button2 = (Button)findViewById(R.id.pause);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SensorDemo1.unregister();
SensorDemo1._File.close_file(SensorDemo1._File.f);
SensorDemo2.unregister();
SensorDemo2._File.close_file(SensorDemo1._File.f);
SensorDemo3.unregister();
SensorDemo3._File.close_file(SensorDemo1._File.f);
}
});
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//flag = 1;
// SensorDemo1.register();
// SensorDemo2.register();
// SensorDemo3.register();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
SensorDemo1.unregister();
SensorDemo2.unregister();
SensorDemo3.unregister();
}
class SensorDemo implements SensorEventListener {
TextView t;
Sensor sensor;
OpenAndCreateFile _File = null;
private long lastUpdateTime;
public SensorDemo(Sensor sensor, TextView t, int type) {
if(type == 1){
_File =new OpenAndCreateFile("acc.txt");
}
if(type == 2){
_File=new OpenAndCreateFile("gr.txt");
}
if(type == 3){
_File=new OpenAndCreateFile("accline.txt");
}
this.t = t;
this.sensor = sensor;
}
public void register() {
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
public void unregister() {
sensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent arg0) {
Sensor sensor1=arg0.sensor;
int sensorType=sensor1.getType();
if(sensorType!=Sensor.TYPE_GRAVITY&&sensorType!=Sensor.TYPE_ACCELEROMETER&&sensorType!=Sensor.TYPE_LINEAR_ACCELERATION){
return;
}
int i = 0;
// TODO Auto-generated method stub
// 现在检测时间
long currentUpdateTime = System.currentTimeMillis();
// 两次检测的时间间隔
long timeInterval = currentUpdateTime - lastUpdateTime;
// 判断是否达到了检测时间间隔
if (timeInterval < UPTATE_INTERVAL_TIME)
return;
// 现在的时间变成last时间
lastUpdateTime = currentUpdateTime;
double speed = Math.sqrt(arg0.values[0] * arg0.values[0] + arg0.values[1] * arg0.values[1] + arg0.values[2]* arg0.values[2])/ timeInterval * 10000;
// 达到速度阀值,发出提示
if (speed > SPEED_SHRESHOLD) {
return;
}
//t.setText("x:" + arg0.values[0] + "\ny:" + arg0.values[1] + "\nz:" + arg0.values[2]);
String x = String.valueOf(arg0.values[0]);
x=processString(x);
String y = String.valueOf(arg0.values[1]);
y=processString(y);
String z = String.valueOf(arg0.values[2]);
z=processString(z);
t.setText("x:" + x + "\ny:" + y + "\nz:" + z);
//加速度
if(sensor1.getType()==Sensor.TYPE_ACCELEROMETER){
SensorDemo1._File.WriteToFile(SensorDemo1._File.f,x,y,z);
}
//重力加速度
if(sensor1.getType()==Sensor.TYPE_GRAVITY){
SensorDemo2._File.WriteToFile(SensorDemo2._File.f,x,y,z);
}
//线性加速度
if(sensor1.getType()==Sensor.TYPE_LINEAR_ACCELERATION){
SensorDemo3._File.WriteToFile(SensorDemo3._File.f,x,y,z);
}
}
private String processString(String str){
int position=str.indexOf('.');
position=position+3;
str=str.substring(0,position);
return str;
}
}
}
这是logcat的部分内容
// 下面是读写文件的类
package com.example.acceleration;
import android.os.Environment;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Created by Administrator on 2016/5/15.
*/
public class OpenAndCreateFile {
public FileOutputStream f =null;
private int count = 1;
private static File file;
public OpenAndCreateFile(String file_name)
{
try{
file = new File(Environment.getExternalStorageDirectory().getPath()+File.separator+file_name);
if(!file.exists()){
file.createNewFile();
}
else {
file.delete();
file.createNewFile();
}
f = new FileOutputStream(file);
}catch (IOException e){
e.printStackTrace();
}
}
public void WriteToFile(FileOutputStream f, String x, String y, String z)
{
x = "x:" + x + " ";
y = "y:" + y + " ";
z = "z:" + z + " ";
byte[] b_x = x.getBytes();
byte[] b_y = y.getBytes();
byte[] b_z = z.getBytes();
byte[] b_enter = "\r\n".getBytes();
try{
// if(type == 1)
f.write(b_x);
f.write(b_y);
f.write(b_z);
f.write(b_enter);
} catch (IOException e) {
e.printStackTrace();
}
}
public void close_file(FileOutputStream f)
{
try{
f.flush();
f.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}