2017-05-11 31 views
0

我是Android平臺的初學者。我寫了下面粘貼的代碼,用於通過點擊按鈕從我的磁性傳感器記錄數據。但是當我點擊按鈕(按鈕ID - btnRecord),它只是記錄數據幾秒鐘,我不得不再次點擊記錄更多。如何在第一次點擊後連續開始記錄數據?先謝謝你。用於記錄傳感器數據的Android按鈕

@Override 
public void onSensorChanged(SensorEvent event) { 
    Sensor sensor = event.sensor; 
    a= event.values[0]; 
    b=event.values[1]; 
    c=event.values[2]; 

    if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 
     magnetismx.setText(Float.toString(event.values[0])); 
     magnetismy.setText(Float.toString(event.values[1])); 
     magnetismz.setText(Float.toString(event.values[2])); 
     Button button2 = (Button) findViewById(R.id.btnRecord); 
     button2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getBaseContext(), "Data Recording Started" , Toast.LENGTH_SHORT).show(); 
       try { 
        writeToCsv(Float.toString(a), Float.toString(b), Float.toString(c)); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
} 
+0

您可以每5秒或10秒使用TimerContdown。如果你想每5-10秒更新一次UI,你也可以使用Android服務和廣播接收器。 –

+0

謝謝你的幫助。我會仔細看看的。 –

回答

2

那些寫文件是在onClick() 這隻有當你點擊該按鈕,它執行一次執行的代碼。

onSensorChanged()將被調用,但onClick()將不會再次執行。

你需要做一個標記(布爾)會告訴何時存儲在文件中, 該標誌爲onClick()

前改變,

boolean recording = false; 

Button button2 = (Button) findViewById(R.id.btnRecord); 
button2.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
     recording = true; 
     Toast.makeText(getBaseContext(), "Data Recording Started" , Toast.LENGTH_SHORT).show(); 
    } 
}); 

@Override 
public void onSensorChanged(SensorEvent event) { 

    Sensor sensor = event.sensor; 
    a= event.values[0]; 
    b=event.values[1]; 
    c=event.values[2]; 
    if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 

     magnetismx.setText(Float.toString(event.values[0])); 
     magnetismy.setText(Float.toString(event.values[1])); 
     magnetismz.setText(Float.toString(event.values[2])); 

     if(!recording){ 
      return; 
     } 

     try { 
      writeToCsv(Float.toString(a), Float.toString(b), Float.toString(c)); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

使按鈕行爲作爲開關(開,關)來改變此

recording = true; 

至此

recording = !recording ; 

這將顛倒布爾值的當前值。 這種方式一次點擊就會開始記錄,下次點擊就會停止它。

+0

謝謝你的幫助。有效。 –

+0

此外,我想知道如果我想添加另一個按鈕來停止記錄。我該怎麼做? –

+0

@BimalBhattarai不需要另一個按鈕,檢查我的答案,最後我解釋瞭如何讓相同的按鈕開啓和關閉記錄,如果你還想要另一個按鈕,只需添加它與第一個按鈕相同,並且onClick將具有' recording = false;' – Yazan

0

取出Button出回調onSensorChanged的。你不需要它。例如在onCreate()方法中,例如在其他地方定義Button

onCreate() 
Button button2 = (Button) findViewById(R.id.btnRecord); 
button2.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        flip = !flip; 
      }); 

布爾場flip用於控制您的onSensorChanged回調的寫入性能。因此,在你的類中定義一個私有字段flip和使用它像這樣

@Override 
    public void onSensorChanged(SensorEvent event) { 
     Sensor sensor = event.sensor; 
     a= event.values[0]; 
     b=event.values[1]; 
     c=event.values[2]; 
     if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 

     magnetismx.setText(Float.toString(event.values[0])); 
     magnetismy.setText(Float.toString(event.values[1])); 
     magnetismz.setText(Float.toString(event.values[2])); 
     if(flip) writeToCsv(Float.toString(a), Float.toString(b), Float.toString(c)); 
    } 
} 
+0

哦,我貼了幾乎相同的答案:) – Yazan

+0

謝謝你的幫助。 –