c# - 如何使用蓝牙套接字从游戏 Controller 接收按钮事件?

标签 c# android sockets bluetooth xamarin.android

目前我与游戏 Controller 的蓝牙连接正常。现在我正试图捕捉按钮事件,但这并不容易。我有以下代码:

    private Stream mmInStream;
    private Stream mmOutStream;

    public BluetoothController()
    {

    }

    public void Read(BluetoothSocket socket)
    {
        Stream tmpIn = null;
        Stream tmpOut = null;

        try
        {
            tmpIn = socket.InputStream;
            tmpOut = socket.OutputStream;
        }
        catch (IOException ex)
        {
            throw ex;
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;

        Thread thread = new Thread(new ThreadStart(Run));
        thread.Start();
    }

    protected void Run()
    {
        byte[] buffer = new byte[1024];
        int bytes;

        while (true)
        {
            try
            {
                // Thanks to @spaceplane
                if (mmInStream.IsDataAvailable())
                {
                    // Read from the InputStream
                    bytes = mmInStream.Read(buffer, 0, buffer.Length);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

当我按下游戏 Controller 上的按钮时,它不会进入下一行:

if (mmInStream.IsDataAvailable())

这里有什么问题吗?

最佳答案

mmInStream.read() 如果流中当前没有数据可供读取,则阻塞。因此,如果没有数据,它就会卡在那里等待。在从流中读取之前,您应该检查是否有任何可用数据。变化

bytes = mmInStream.Read(buffer, 0, buffer.Length);

if(mmInStream.available() > 0) {
  bytes = mmInStream.Read(buffer, 0, buffer.Length);
}

关于c# - 如何使用蓝牙套接字从游戏 Controller 接收按钮事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36339631/

相关文章:

c# - 我可以在 Windows 7 上仅使用 VS 2010 Express 和本地主机来学习 ASP.NET MVC 吗?

java - 如何从MYSQL数据库中获取数据并显示在应用程序中?

android - RadioGroup : How to check programmatically

java - 如何保持列表项和数据库行之间的连接?

c# - Web异常: Unable to connect to the remote server

linux - 防止 Docker Compose 创建单独的网络

c - 简单的 UDP 服务器回复不起作用

C#引用分配未按预期工作

c# - 如何在我需要时打开门

c# - 开头没有选定行的 DataGridView