2016-12-13 3 views
1

1秒間に100個の加速度計の読み取り値を取得しようとしていますが、100個の読み取り値の代わりに1回同じ読み取り値を100回返します。OnSensorChanged()ループ内の値を変更しません

私は私は私のアプリでボタンを押したときに

私MainActivityは、加速度計は、(X軸)を読み取る場所です

float ax; 

という名前のこの変数を持っているこれらの100回の加速度計の測定値を表示しようとしている

継続的に記憶される。

と私BuildTable((アプリケーション自体に出力を表示する)BuildTable()関数

をトリガ私のOnCreate関数()メソッド

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

このボタンのコードを持っている)を有していますこの

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()関数のようなものは、この

のように見えます
@Override 
public void onSensorChanged(SensorEvent event) {  
    ax = event.values[0];  

} 

axを更新するだけです。

ボタンをクリックすると、axの更新が一時停止しますか?どのように私はこれを修正するのですか?

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

ですから、(System.currentTimeMillis() - lasttime> = 10)が起動していることを確認しましたか?読書は賢明ですか?アプリを実行するたびに、まったく同じ値ですか、毎回異なるのですか? –

+0

onSensorChangedをトリガーする加速度センサーでも、他のセンサーではない加速度センサーでも分かりますか? –

+0

タイミングコードが動作し、100回読むことができます。実際の問題は100回同じ読み取りです –

答えて

0

を使用して

乾杯

0
onSensorChanged機能で

てみフィルタリング結果は私がonSensorChangedを()凍結ループを回避する方法を発見しました!

私は本質的にrunnablesと 'flag'変数の助けを借りてマルチスレッドを実装しなければなりませんでした( 'flag'変数はのstaticででなければなりません)。

BuildTable()関数を新しいRunnableに配置し、それをスレッドに挿入しました。だから、主なスレッド(私はGUIのためだと思います)と、排他的にセンサーの読み取り値を受信して​​保存するように修正しなければならない別のスレッドがあります。

これらの変数の実際の表示は、私のBuildTable()スレッドによって変更された 'フラグ'変数の助けを借りて、メインスレッド(UIThreadと呼ばれると思います)で実行されました。 'フラグ'変数はのstaticである必要があります)。

私はより多くのヒントをコードスニペットを追加することができ、おそらく以降、誰かがそれを要求したときに、それは少し朝早く

乾杯です!

+0

uh ...私はonSensorChangedスレッドがどんなスレッドで実行されているのかわかりません。それがBuildTableと同じスレッド上で実行されていると、あなたはうんざりです。この投稿をチェックして、リスナーの登録を説明してください - http://stackoverflow.com/questions/17513352/acclerometer-sensor-in-separate-thread –

+0

答えは何もしませんでした。すでに述べたように、センサーは正しい読み取り値であるかどうかに関係なく、既に読み取り値を取得しています。実際の問題は、whileループが入力されたときにonSensorChanged()によってセンサーを読み取る '状態'がフリーズすることです –

関連する問題