2013-05-13 2 views
0

나는 안드로이드를 처음 접하고 아직도 놀고있다. 그러나 최근에는 문제가 발생하여 막혔습니다. 가속도계에서 데이터를 가져 와서 achartengine을 사용하여 실시간으로 그려 봅니다. 처음에는 가속도계의 데이터를 저장 한 다음 그것을 그려 봅니다. 에뮬레이터에서 실행할 수는 있지만 Nexus 4를 실행중인 젤리 빈에 응용 프로그램을 배포하면 응용 프로그램이 중단됩니다. 나는 이유를 알 수없는 것 같습니다. 의견 있으십니까?실시간으로 가속도계에서 achartengine까지의 데이터

public class MainActivity extends Activity implements SensorEventListener,OnClickListener { 

private Button butStart, butStop; 
private LinearLayout layout; 
private boolean started = false; 
private SensorManager sensorManager; 


private static GraphicalView view; 
private LineChart line = new LineChart(); 
private long t; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    layout = (LinearLayout) findViewById(R.id.chart_container); 
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    new ArrayList<AccelemoterData>(); 


    butStart = (Button) findViewById(R.id.butStart); 
    butStop = (Button) findViewById(R.id.butStop); 

    butStart.setOnClickListener(this); 
    butStop.setOnClickListener(this); 

    butStart.setEnabled(true); 
    butStop.setEnabled(false); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (started) { 

     double x = event.values[0]; 
     double y = event.values[1]; 
     double z = event.values[2]; 
     long time = System.currentTimeMillis(); 
     AccelemoterData data = new AccelemoterData(time, x, y, z); 

     line.addNewData(data, t); 
     view.repaint(); 




    } 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.butStart: 

     view = line.getView(this); 
     setContentView(view); 
     butStop.setEnabled(true); 
     butStart.setEnabled(false); 
     new ArrayList<AccelemoterData>(); 
     started = true; 
     t = System.currentTimeMillis(); 
     Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     sensorManager.registerListener(this, accelerometer,SensorManager.SENSOR_DELAY_FASTEST); 


     break; 
    case R.id.butStop: 
     butStop.setEnabled(false); 
     butStart.setEnabled(true); 
     started = false; 
     sensorManager.unregisterListener(this); 
     layout.removeAllViews(); 

     break; 
    default: 
     break; 

    } 




} 

}

public class LineChart { 

private GraphicalView view; 



private TimeSeries xSeries = new TimeSeries("X"); 
private TimeSeries ySeries = new TimeSeries("Y"); 
private TimeSeries zSeries = new TimeSeries("Z"); 

private XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 

XYSeriesRenderer xRenderer = new XYSeriesRenderer(); 
XYSeriesRenderer yRenderer = new XYSeriesRenderer(); 
XYSeriesRenderer zRenderer = new XYSeriesRenderer(); 

XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer(); 

public LineChart() { 


    dataset.addSeries(xSeries); 
    dataset.addSeries(ySeries); 
    dataset.addSeries(zSeries); 


    xRenderer.setColor(Color.RED); 
    xRenderer.setPointStyle(PointStyle.CIRCLE); 
    xRenderer.setFillPoints(true); 
    xRenderer.setLineWidth(1); 
    xRenderer.setDisplayChartValues(false); 


    yRenderer.setColor(Color.GREEN); 
    yRenderer.setPointStyle(PointStyle.CIRCLE); 
    yRenderer.setFillPoints(true); 
    yRenderer.setLineWidth(1); 
    yRenderer.setDisplayChartValues(false); 


    zRenderer.setColor(Color.BLUE); 
    zRenderer.setPointStyle(PointStyle.CIRCLE); 
    zRenderer.setFillPoints(true); 
    zRenderer.setLineWidth(1); 
    zRenderer.setDisplayChartValues(false); 


    multiRenderer.setXLabels(0); 
    multiRenderer.setLabelsColor(Color.RED); 
    multiRenderer.setChartTitle("t vs (x,y,z)"); 
    multiRenderer.setXTitle("Sensor Data"); 
    multiRenderer.setYTitle("Values of Acceleration"); 
    multiRenderer.setZoomButtonsVisible(true); 

    multiRenderer.addSeriesRenderer(xRenderer); 
    multiRenderer.addSeriesRenderer(yRenderer); 
    multiRenderer.addSeriesRenderer(zRenderer); 
} 

public GraphicalView getView(Context context) 
{ 
    view = ChartFactory.getLineChartView(context, dataset, multiRenderer); 
    return view; 
} 

public void addNewData(AccelemoterData data, long t) 
{ 
    xSeries.add(data.getTime()-t, data.getX()); 
    ySeries.add(data.getTime()-t, data.getY()); 
    zSeries.add(data.getTime()-t, data.getZ()); 

} 

}

+1

적어도 어떤 오류로 질문을 업데이트 할 수 있습니까? –

답변

0

은 물론 당신은 내가 복사하여 코드를 붙여 내 기준을 사용하여 클래스 AccelerometerData 쓰기, AccelerometerData 클래스를 필요로하고 나를 위해 작동합니다. 당신의 주요 활동에

line.addNewData(data, time); 

: 제외,이 변경되었습니다.

AccelerometerData (필자가 스페인어이므로 이름을 변경 한 경우) AccelerometerData에 대한 이름을 변경하고 작동해야합니다.

public class DatosAcelerometro { 
private long time; 
private float x; 
private float y; 
private float z; 

public DatosAcelerometro(long time, float x, float y,float z) 
{ 
    this.time=time; 
    this.x = x; 
    this.y = y; 
    this.z = z; 
} 

    public long getTime(){ 
      return time; 
    } 

public float getX() { 
     return x; 
} 

public float getY() { 
    return y; 
} 

public float getZ(){ 
    return z; 
} 

}

나는 당신의 무지 오류를 수정 바랍니다. ;)

관련 문제