此刻,我正在尝试使用Android Studio编写一些应用程序。我想创建一个应用程序,向我显示加速度计的值。因此,我观看了一些YouTube视频,并获得了正确的价值。但是现在我想在手机屏幕上显示它们。我创建了一个界面,但手机上的应用程序未显示该界面。此外,当我尝试在MainActivity中使用我的界面时,还会显示一条错误消息。
如果我注释掉我所有的加速度计代码,则没有任何错误,并且布局显示正确。
package com.example.bwki_test_accelometer;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private static final String TAG = "MainActivity";
private android.hardware.SensorManager sensorManager;
private Sensor accelerometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: Initialzing Sensor Services");
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (accelerometer== null){
Toast.makeText(this, "Der Sensor ist nicht verfügbar!", Toast.LENGTH_SHORT).show();
finish();
}
sensorManager.registerListener(MainActivity.this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL );
Log.d(TAG, "onCreate: Regoster accelerometer listener");
}
@Override
public void onSensorChanged(SensorEvent event) {
Log.d(TAG, "onSensorChanged:X:" + event.values[0] + " Y: " + event.values[1] + " Z: " + event.values[2]);
/*
EditText XAchse=(EditText)findViewById(R.id.XAchse);
XAchse.setText((int) event.values[0]);
EditText YAchse=(EditText)findViewById(R.id.YAchse);
YAchse.setText((int) event.values[1]);
EditText ZAchse=(EditText)findViewById(R.id.ZAchse);
ZAchse.setText((int) event.values[2]);
*/
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}}
答案 0 :(得分:0)
如果从onSensorChanged(...)中删除Thread.sleep(...),它是否起作用?我认为onSensorChanged(...)被相对频繁地调用,这可能会阻止应用程序发生任何其他事情。
Android对线程上的长期运行任务并不感到兴奋。您应该在自己的工作线程中运行它。
答案 1 :(得分:0)
代码有2个问题:将文本设置为强制转换整数,然后在线程上休眠。首先,用try...catch
删除整个Thread.sleep()
块,因为这会引起问题,您实际上不需要在那里暂停一秒钟。其次,不要将您的加速度计值转换为int,而只是显示其原始浮点值(setText()
期望资源ID为整数)。注释掉的代码块可能看起来像这样(您需要在相应的布局文件中将EditText替换为TextView):
TextView XAchse= findViewById(R.id.XAchse);
XAchse.setText(String.valueOf(event.values[0]));
TextView YAchse= findViewById(R.id.YAchse);
YAchse.setText(String.valueOf(event.values[1]));
TextView ZAchse= findViewById(R.id.ZAchse);
ZAchse.setText(String.valueOf(event.values[2]));
我在一个快速的示例应用程序中对其进行了测试,并且可以正常工作。