我正在创建一个应用程序,用于从Gear Live向笔记本电脑发送加速度计和陀螺仪数据。这两个设备位于同一Wi-Fi网络上。我在可穿戴设备上实现了套接字侦听器,在笔记本电脑上实现了服务器。套接字侦听器正在线程中运行。
这是套接字侦听器代码:
public class SocketListenThread implements Runnable
{
@Override
public void run()
{
try
{
Log.i(TAG, "trying to bind to the host");
socket = new Socket( "192.168.43.184", dstPort );
Log.i(TAG, "Connected..");
outputStream = socket.getOutputStream();
while( runThread )
{
if( dataObj == null )
{
synchronized ( lock )
{
lock.wait();
}
}
synchronized ( lock )
{
ObjectOutputStream os = new ObjectOutputStream( outputStream );
os.writeObject(1);
os.flush();
ConnectionUtil.close(os);
lock.notifyAll();
}
Thread.sleep( 1 );
}
}
catch( InterruptedException e )
{
Log.e( SocketListenThread.class.getSimpleName() + "InterruptedException", e.toString() );
}
catch( Exception e )
{
Log.e( SocketListenThread.class.getSimpleName() + "Exception", e.toString() );
e.printStackTrace();
}
finally
{
ConnectionUtil.close( outputStream );
ConnectionUtil.close( socket );
connected = false;
}
}
}
这是传感器数据提取方法,并通知套接字发送数据:
@Override
public void onSensorChanged(SensorEvent event)
{
List<Float> valList = new ArrayList<>();
switch( event.sensor.getType() )
{
case Sensor.TYPE_HEART_RATE:
valList.add(event.values[0]);
sendData(new DataObj(TYPE_HEART_RATE,valList));
break;
case Sensor.TYPE_ACCELEROMETER:
valList.add(event.values[0]);
valList.add(event.values[1]);
valList.add(event.values[2]);
sendData(new DataObj(TYPE_ACCELEROMETER,valList));
break;
case Sensor.TYPE_GYROSCOPE:
valList.add(event.values[0]);
valList.add(event.values[1]);
valList.add(event.values[2]);
sendData(new DataObj(TYPE_GYROSCOPE,valList));
break;
default:
break;
}
}
public void sendData( DataObj dataObj )
{
synchronized( lock )
{
if( dataObj != null)
{
this.dataObj = dataObj;
}
lock.notifyAll();
}
}
问题是,当我运行这段代码时,我没有得到传感器数据。也就是说,尽管此代码在手机中正常运行,但我没有收到onSensorChanged(SensorEvent event)
回调的任何传感器数据更改值。如果我从代码中删除套接字线程,则会收到数据。
所以我的问题是: