0
我正在尝试使用背景服务来读取手机的方位角,俯仰角和滚动角并通过网络发送它们。我已经创建了一个IntentService
和计算代码来计算方向,但是我不太确定我是如何将后台服务注册为事件监听器的。如何在Android中注册后台服务作为SensorEventListener
public class SocketService extends IntentService implements SensorEventListener {
Socket my_socket;
PrintWriter out;
float[] mGravity;
float[] mGeomagnetic;
float azimuth,pitch,roll;
public void onAccuracyChanged(Sensor s, int accuracy){
}
public void onSensorChanged(SensorEvent event){
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
mGravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
mGeomagnetic = event.values;
if (mGravity != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
if (success) {
float orientationData[] = new float[3];
SensorManager.getOrientation(R, orientationData);
azimuth = orientationData[0];
pitch = orientationData[1];
roll = orientationData[2];
out.print("Hello");
out.flush();
}
}
}
public SocketService(){
super("Socket Service");
}
protected void onHandleIntent(Intent workIntent) {
try {
my_socket = new Socket(ip, 5000);
out = new PrintWriter(my_socket.getOutputStream());
}catch(Exception e){
Log.v("ERROR",e.getMessage());
}
}
}
我曾尝试onHandleIntent
内把
Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Sensor mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
mSensorManager.registerListener(this,mAccelerometer,SensorManager.SENSOR_DELAY_FASTEST);
mSensorManager.registerListener(this,mGravity,SensorManager.SENSOR_DELAY_FASTEST);
来编译但是没有数据在插座的另一端检测到的(没有检测到的数据,即使我尝试记录它,所以必须有一个问题与实际SensorEventListener
它适用于我,你在什么地方放点完全? mSensorManager.registerListener(this,...) – jbarat
@jbarat对不起。我更新了问题 – Bula
只是为了确定代码是否是别的问题,如果将此代码放入活动中,它是否有效? – jbarat