2016-12-13 2 views
1

1 초에 100 개의 가속도계 판독 값을 얻으려고 시도하지만 100 개의 다른 판독 값 대신 100 개의 동일한 판독 값을 제공합니다.OnSensorChanged() 루프의 값을 변경하지 않습니다.

나는 내 응용 프로그램에서 버튼을 누르면이 100 개 가속도계 측정 값을 표시하기 위해 노력하고있어

내 MainActivity이 변수가 임명했다

가속도계는 (X 축) 읽는 곳이다
float ax; 

계속 저장됩니다.

난)

내 BuildTable (디스플레이를 앱 자체의 출력 임) BuildTable() 함수를 트리거

button = (Button)findViewById(R.id.startbutton); //inits button 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) {    
      BuildTable(); 
     } 
    }); 

(내에서 OnCreate() 메소드에 버튼 코드가있을 이

public void BuildTable() 
{  

    TableRow trow = new TableRow(this); 
    TextView text = new TextView(this);  

    int count = 0; 

    while (count < 100) 
    { 

     if(System.currentTimeMillis() - lasttime >= 10) 
     { 

      lasttime = System.currentTimeMillis();    
      text = new TextView(this); 
      Log.d("MyApp","ax is: "+ax); 
      text.setText(""+ax); 
      trow = new TableRow(this); 
      trow.addView(text); 
      table.addView(trow,count); 
      count++; 

     } 

    } 
} 

과 OnSensorChanged() 함수 같은이

,691처럼 보인다
@Override 
public void onSensorChanged(SensorEvent event) {  
    ax = event.values[0];  

} 

그냥 ax를 업데이트합니다.

어떻게 버튼을 클릭하면 도끼 업데이트가 일시 중지됩니까? 어떻게 해결할 수 있습니까? onSensorChanged 기능에

건배

+0

그래서 (System.currentTimeMillis() - lasttime> = 10) if firing인지 확인 했습니까? 독서가 합리적인가요? 앱을 실행할 때마다 정확히 동일한 값입니까, 매번 다른 값입니까? –

+0

센서에서 트리거하는 가속도계조차 있다는 것을 어떻게 알 수 있습니까? –

+0

타이밍 코드가 작동하면 100 번 읽음을 줄 수 있고 실제 문제는 100 번 읽음이 동일하다는 것입니다 –

답변

0

내가 onSensorChanged 동결 루프 주위에 얻을 수있는 방법을 발견하여()!

runnables 및 'flag'변수를 사용하여 멀티 스레딩을 구현해야했습니다 ('플래그'변수는 이어야 함).

내 BuildTable() 함수를 새 Runnable에 배치 한 다음 스레드에 삽입했습니다. 그래서 메인 스레드 (GUI 용)와 별도의 스레드가 있습니다.이 스레드는 센서 판독 값 만 수신하고 저장하도록 수정해야했습니다.

그런 다음 테이블에서 이러한 변수를 실제로 표시하는 것은 내 스레드 (UIThread라고 생각합니다)에서 실행되었으며, BuildTable() 스레드에 의해 수정 된 '플래그'변수를 사용하여 수행되었습니다 (따라서 '플래그'변수는 인 정적이어야합니다.

나는 더 많은 힌트 코드 조각을 추가 할 수 있지만, 아마도 나중에 누군가가 요청하는 경우 또는, 그것은 약간은 이른 아침에

건배입니다!

0

시도 필터링 결과

@Override 
public void onSensorChanged(SensorEvent event) 
{  
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) 
    { 
     ax = event.values[0];  
    } 
} 
+0

어 ...하지만 onSensorChanged 스레드가 어떤 스레드인지 알 수는 없습니다. BuildTable과 같은 스레드에서 실행되는 경우 실수로 종료됩니다. 이 게시물에서 청취자 등록을 설명하는 곳을 확인하십시오. http://stackoverflow.com/questions/17513352/acclerometer-sensor-in-separate-thread –

+0

대답은 아무 것도하지 않습니다. 이전에 이미 언급했듯이 센서는 올바른 판독 값인지 여부와 관계없이 이미 판독 값을 얻고 있습니다. 실제 문제는 while 루프가 입력 될 때 onSensorChanged()에 의한 센서 읽기의 '상태'가 고정되는 것입니다. –

관련 문제