是否可以在onCreate方法中获取Android加速计值?
是否可以在是否可以在onCreate方法中获取Android加速计值?,android,initialization,accelerometer,android-sensors,oncreate,Android,Initialization,Accelerometer,Android Sensors,Oncreate,是否可以在onCreate方法中获取Android加速计值?我想要它, 以便在阅读后进行一些初始化。到目前为止,我已经注册了 传感器侦听器,用于在这些值通过 回拨。我有3个浮点属性(lastx、lasty和lastz)初始化为-1,以便在更改时将加速计值存储在那里。在onCreate方法中,注册传感器侦听器后,我尝试检查这些值,但它们始终等于-1。是否有办法在onCreate方法中获取这些值 这是我的密码: public class MainActivity extends Activity i
onCreate
方法中获取Android加速计值?我想要它,
以便在阅读后进行一些初始化。到目前为止,我已经注册了
传感器侦听器,用于在这些值通过
回拨。我有3个浮点属性(lastx、lasty和lastz)初始化为-1,以便在更改时将加速计值存储在那里。在onCreate
方法中,注册传感器侦听器后,我尝试检查这些值,但它们始终等于-1。是否有办法在onCreate
方法中获取这些值
这是我的密码:
public class MainActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
TextView textView;
StringBuilder builder = new StringBuilder();
float lastx = -1;
float lasty = -1;
float lastz = -1;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
textView = new TextView(this);
SensorManager manager = (SensorManager)
getSystemService(Context.SENSOR_SERVICE);
Sensor accelerometer = manager.getDefaultSensor(
Sensor.TYPE_ACCELEROMETER);
if(!manager.registerListener(this, accelerometer,
SensorManager.SENSOR_DELAY_GAME)){
Log.d("ERROR: ", "NO accelerometer found!");
}
setContentView(textView);
builder.setLength(0);
builder.append(
"X " + this.lastx + "\nY " + this.lasty + "\nZ " + this.lasty);
textView.setText(builder.toString());
Log.d(" * accelerometer values:",
"X: " + this.lastx+", Y: " + this.lasty + ", Z: " + this.lastz);
}
public void onAccuracyChanged(Sensor sensor,int accuracy){
}
public void onSensorChanged(SensorEvent event){
// check sensor type
if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
// assign directions
float x=event.values[0];
float y=event.values[1];
float z=event.values[2];
this.lastx = x;
this.lasty = y;
this.lastz = z;
// builder.setLength(0);
// builder.append("X " + x + "\nY " + y + "\nZ " + z);
// textView.setText(builder.toString());
}
}
}
我认为主用户界面线程用于
onCreate
和onSensorChanged
。因此,在创建完成之前,onSensorChanged
无法运行。无论您需要进行什么样的初始化,我建议您安排在第一次调用onSensorChanged
时进行初始化,例如,如果值为-1,则进行初始化。首先初始化一些变量
int value , count = 0 , newVal;
内部onSensorChanged
if(count == 0){
value = (int) event.values[0];
count++;
}
newVal = (int) event.values[0] - value ;
是的,谢谢。我已经考虑过这个解决方案,我确信它是有效的。但我很好奇,是否可以从
onCreate
函数内部获取这些值,甚至是以其他一些可能的黑客方式。由于我提到的线程化原因,任何此类方法都不会通过onsensorchange
。如果有这样的方法,那么我不知道。此外,如果手机移动得很小(如果有人刚刚启动了你的应用程序,很可能是因为他们拿着手机),那么你看到的加速计值会非常不稳定。所以我发现很难想象,在看起来几乎是随机输入的基础上,你想要做什么有用的初始化。我再等一会儿。。如果没有其他答案,我会把你的答案记为正确答案。谢谢你抽出时间!“我想要它,以便在阅读后进行一些初始化”--将您的初始化放入onSensorChanged()
。