- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试更改以下代码以使用指南针,但是我遇到了麻烦,我尝试使用 SensorEventListener,但我失败了。有没有我可以遵循的教程?任何帮助将不胜感激。
private static SensorListener orientationListener;
private static boolean isTrackingOrientation = false;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
orientationListener = new SensorListener() {
public void onSensorChanged(int s, float v[]) {
float northDirection = v[android.hardware.SensorManager.DATA_X];
((QiblaCompassView)findViewById(R.id.qibla_compass)).setDirections(northDirection, VARIABLE.qiblaDirection);
}
public void onAccuracyChanged(int s, int a) {
}
};
}
@Override
public void onResume() {
startTrackingOrientation();
super.onResume();
}
@Override
public void onPause() {
stopTrackingOrientation();
super.onPause();
}
private void startTrackingOrientation() {
if(!isTrackingOrientation) isTrackingOrientation = ((SensorManager)getSystemService(SENSOR_SERVICE)).registerListener(orientationListener, android.hardware.SensorManager.SENSOR_ORIENTATION);
}
private void stopTrackingOrientation() {
if(isTrackingOrientation) ((SensorManager)getSystemService(SENSOR_SERVICE)).unregisterListener(orientationListener);
isTrackingOrientation = false;
}
最佳答案
这是对传感器工作原理的一个很好的解释: http://developer.android.com/reference/android/hardware/SensorEvent.html
此代码成功运行:
package com.example.testvideo;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity implements SensorEventListener {
SensorManager mSensorManager;
Sensor accSensor;
Sensor magnetSensor;
float gravity[];
float geoMagnetic[];
float azimut;
float pitch;
float roll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magnetSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mSensorManager.registerListener(this, accSensor, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(this, magnetSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this, accSensor);
mSensorManager.unregisterListener(this, magnetSensor);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
gravity = event.values.clone();
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
geoMagnetic = event.values.clone();
if (gravity != null && geoMagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, gravity, geoMagnetic);
if (success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
azimut = 57.29578F * orientation[0];
pitch = 57.29578F * orientation[1];
roll = 57.29578F * orientation[2];
float dist = Math.abs((float) (1.4f * Math.tan(pitch * Math.PI / 180)));
Log.d("log", "orientation values: " + azimut + " / " + pitch + " / " + roll + " dist = " + dist);
}
}
}
}
关于Android SensorListener 弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16737171/
我正在尝试更改以下代码以使用指南针,但是我遇到了麻烦,我尝试使用 SensorEventListener,但我失败了。有没有我可以遵循的教程?任何帮助将不胜感激。 private static Sen
我的 Android 代码中有一个事件处理机制,可以将传感器值转储到一个文件中。现在,我在主 UI 线程中执行此操作,因此 UI 按钮响应非常缓慢,我想加快速度。 如何在事件处理函数上使用多线程?我正
我正在创建一个名为 CompassApp 的应用程序。我创建了两个名为 Compass.java 和 Rose.java 的类。此应用程序是根据网站中描述的教程创建的,并且使用了已弃用的 Sensor
@Override protected void onResume(){ //super.onResume(); sensorManager.registerListener
我添加到应用程序 public class ShakeActivity extends Activity implements SensorListener 但是当我写它时,我收到了来自 eclips
我是一名优秀的程序员,十分优秀!