将传感器数据从Wear OS实时发送到笔记本电脑

时间:2018-09-25 00:17:11

标签: android sockets android-sensors android-wear-2.0

我正在创建一个应用程序,用于从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)回调的任何传感器数据更改值。如果我从代码中删除套接字线程,则会收到数据。

所以我的问题是:

  • 此代码是否有问题
  • 如果是这样,从穿戴设备向笔记本电脑发送数据的最佳方式是什么(我需要实时查看数据,并且数据丢失最少)。

0 个答案:

没有答案