2015-10-20 50 views
0

這是我的onSensorChanged代碼迄今:Android的 - 如何動態地更改文本當某一傳感器被觸發

@Override 
    public void onSensorChanged(SensorEvent event) { 
     if (sm.getSensorList(Sensor.TYPE_ACCELEROMETER).size() != 0) { 
      dynamictext.setText("X: " + event.values[0] + " MS^-2 \nY: " + event.values[1] + " MS^-2 \nZ: " + event.values[2] + " MS^-2"); 
     } else if (sm.getSensorList(Sensor.TYPE_ROTATION_VECTOR).size() != 0) { 
      dynamictext.setText("X: " + event.values[0] + "\nY: " + event.values[1] + "\nZ: " + event.values[2] + "scalar: " + event.values[3]);} 

正如你可以看到我在檢查如果傳感器在傳感器列表中存在再更新動態文字,但這不是我的意圖。

意圖是僅當觸發的傳感器被觸發時更新此文本。寫的僞這個會是這樣的,例如:

如果(AccelerometerSensorWasTriggered ==加速度計){ 運行代碼}

我想:

if(this == TYPE_ACCELEROMETER){} 

注:HandlerThread用於我的傳感器等等我實際上可以設置動態文本。

我覺得我需要通過事件?任何澄清或任何想法,將不勝感激,謝謝!

回答

3

你不需要通過任何事件,因爲這方法是自動調用

確保你已經添加了這些行:

s = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     sm.registerListener(this, s, SensorManager.SENSOR_DELAY_GAME); 

這是我的代碼,我改變了TextView的,你會得到一個想法:

package com.example.accel_dialer; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.text.NoCopySpan.Concrete; 
import android.widget.TextView; 
import android.widget.Toast; 

public class AccelDialActivity extends Activity implements SensorEventListener { 
    SensorManager sm; 
    Sensor s; 
    Context cv = this; 
    TextView tv1, tv2, tv3, tv4,tv5,tv6; 
    double a, min = 20,max=0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_accel_dial); 
     sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 

     s = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     sm.registerListener(this, s, SensorManager.SENSOR_DELAY_GAME); 
     tv1 = (TextView) findViewById(R.id.textView1); 
     tv2 = (TextView) findViewById(R.id.textView2); 
     tv3 = (TextView) findViewById(R.id.textView3); 
     tv4 = (TextView) findViewById(R.id.textView4); 
     tv5 = (TextView) findViewById(R.id.min); 
     tv6 = (TextView) findViewById(R.id.max); 

    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 
     float ax, ay, az; 

     ax = event.values[0]; 
     ay = event.values[1]; 
     az = event.values[2]; 
     a = Math.sqrt((ax * ax) + (ay * ay) + (az * az)); 
     if(a<min) 
     { 
      min=a; 
     } 
     if(a>max) 
     { 
      max=a; 
     } 

     tv1.setText("AX:" + ax); 
     tv2.setText("Ay:" + ay); 
     tv3.setText("Az:" + az); 
     tv4.setText("A:" + a); 
     tv5.setText(""+min); 
     tv6.setText(""+max); 
     if(a>40) 
     { 
      Intent i = new Intent(Intent.ACTION_CALL); 
      i.setData(Uri.parse("tel:any contact number")); 
      cv.startActivity(i); 
     } 

    } 
} 
+0

太棒了,謝謝。 – Savagefool

+0

@Savagefool你是welome –