2016-02-17 37 views
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

+0

它适用于我,你在什么地方放点完全? mSensorManager.registerListener(this,...) – jbarat

+0

@jbarat对不起。我更新了问题 – Bula

+0

只是为了确定代码是否是别的问题,如果将此代码放入活动中,它是否有效? – jbarat

回答

1

似乎问题是,

Sensor mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); 

是不一样的

Sensor mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 

有一次,我改变了这一点,一切都按一个魅力。