2014-01-28 30 views
0

我遇到了這個加速度計編碼的問題。我一直得到0作爲加速計的返回值。首先忽略cal_displace部分,因爲現在我無法從加速度計獲得任何值。非常感謝您的幫助。獲取0作爲加速度計的返回值

package com.example.suntracking; 

import android.app.Activity; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.widget.TextView; 

public class Accelerometer extends Activity implements SensorEventListener{ 
Sensor accelerometer; 
SensorManager sm; 
int samintval; 
float ax,ay,axtemp ,aytemp ,sx,sy; 
TextView showax,showay,showaxtemp,showaytemp; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.accelerometer); 
    loadsavedPref(); 
    initialize(); 
    cal_displace(); 
    display(); 
    savePreferences(); 
} 


private void display() { 
    // TODO Auto-generated method stub 
    showax.setText(""+ax); 
    showay.setText(""+ay); 
    showaxtemp.setText(""+axtemp); 
    showaytemp.setText(""+aytemp); 
} 


@Override 
protected void onResume() 
{ 
super.onResume(); 
sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
} 
@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    sm.unregisterListener(this); 
} 


private void initialize() { 
    // TODO Auto-generated method stub 
    showax=(TextView)findViewById(R.id.tvax); 
    showay=(TextView)findViewById(R.id.tvay); 
    showaxtemp=(TextView)findViewById(R.id.tvaxtemp); 
    showaytemp=(TextView)findViewById(R.id.tvaytemp); 
    sm=(SensorManager)getSystemService(SENSOR_SERVICE); 
    accelerometer=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
} 

private void loadsavedPref() { 
    // TODO Auto-generated method stub 
    SharedPreferences savedata= getSharedPreferences("savealldata",0); 
    samintval = savedata.getInt("samintval", 1000); 
} 

private void cal_displace() { 
    // TODO Auto-generated method stub 
    sx = (float) (0.5 * ((ax - axtemp)/(samintval/1000)) * (samintval/1000)*(samintval/1000)); 
    sy = (float) (0.5 * ((ay - aytemp)/(samintval/1000)) * (samintval/1000)*(samintval/1000)); 
    //axtemp = ax; 
    //aytemp = ay; 
} 

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

} 
@Override 
public void onSensorChanged(SensorEvent event) { 
    // TODO Auto-generated method stub 
    if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) 
     return; 
    ax = event.values[0]; 
    ay = event.values[1]; 
    } 

private void savePreferences() { 
    // TODO Auto-generated method stub 
    SharedPreferences savedata = getSharedPreferences("savealldata",0); 
    Editor editor=savedata.edit(); 
    editor.putFloat("ax", ax); 
    editor.putFloat("ay", ay); 
    editor.putFloat("axtemp", axtemp); 
    editor.putFloat("aytemp", aytemp); 
    editor.commit(); 
} 

}

回答

1
  1. 你註冊傳感器監聽器的兩倍,在初始化()和的onResume() - 做它的onResume()只。

  2. 您正在獲取值,但未更新TextView。修改您的onSensorChanged():

    @Override 
    public void onSensorChanged(SensorEvent event) { 
        if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) 
         return; 
    
        ax = event.values[0]; 
        ay = event.values[1]; 
    
        //update TextViews 
        display();  
    } 
    
+0

感謝您的回答,它的工作! :) – user3008754

+0

不客氣。 – Melquiades

+0

我可以將延遲設置爲2秒嗎?延遲時間是2000000,因爲它以微秒爲單位。我試過了,但它並不需要每隔2秒讀取一次,它看起來仍然在持續拍攝 – user3008754