只有配对后,Android应用才能通过蓝牙连接到Java应用服务器

斯瓦希多斯

今天是个好日子!因此,我有一个充当客户端的Android应用程序,并尝试连接到PC中具有蓝牙服务器组件的Java应用程序。

我面临的问题是,只有在Nexus 5的配对设备列表中没有PC时才能建立连接换句话说,它们仅在配对时才连接。因此,每次要建立连接时,我都必须从配对设备列表中删除“我的电脑”,否则连接将失败。

我已经将此简单的Android和Java蓝牙应用程序用作服务器端应用程序的基础:

import java.io.IOException;

import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;

public class WaitThread implements Runnable{

    public WaitThread() { }

    @Override
    public void run() {
        waitForConnection();        
    }

    /** Waiting for connection from devices */
    private void waitForConnection() {
        // retrieve the local Bluetooth device object
        LocalDevice local = null;

        StreamConnectionNotifier notifier;
        StreamConnection connection = null;

        // setup the server to listen for connection
        try {
            local = LocalDevice.getLocalDevice();
            local.setDiscoverable(DiscoveryAgent.GIAC);

            UUID uuid = new UUID("04c6032b00004000800000805f9b34fc", false);

            System.out.println(uuid.toString());

            String url = "btspp://localhost:" + uuid.toString() + ";name=RemoteBluetooth";
            notifier = (StreamConnectionNotifier) Connector.open(url);

        } catch (BluetoothStateException e) {
            System.out.println("Bluetooth is not turned on.");
            e.printStackTrace();
            return;
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        // waiting for connection
        while(true) {
            try {
                System.out.println("waiting for connection...");

                connection = notifier.acceptAndOpen();
                Thread processThread = new Thread(new ProcessConnectionThread(connection));
                processThread.start();

            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
        }
    }
}

并使用了来自android示例项目的BluetoothChat作为客户端的基础:

import java.io.IOException;
import java.util.UUID;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.os.Handler;
import android.os.Message;

public class ConnectThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final BluetoothDevice mmDevice;
    Handler mHandler;
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    private static final UUID MY_UUID = UUID
            .fromString("04c6032b-0000-4000-8000-00805f9b34fc");

    public ConnectThread(BluetoothDevice device, Handler handler) {
        // Use a temporary object that is later assigned to mmSocket,
        // because mmSocket is final
        BluetoothSocket tmpSocket = null;
        mmDevice = device;
        mHandler = handler;

        // Get a BluetoothSocket to connect with the given BluetoothDevice
        try {
            tmpSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) {
            Message msgException = new Message();
            msgException.setTarget(mHandler);
            msgException.what = Constants.DISCONNECTED_HANDLER;
            msgException.sendToTarget();
        }
        mmSocket = tmpSocket;

    }

    public void run() {
        // Cancel discovery because it will slow down the connection
        mBluetoothAdapter.cancelDiscovery();

        Message msg1 = new Message(); // handler. we use it to know when de
                                        // device has been connected or
                                        // disconnected in the UI activity
        msg1.setTarget(mHandler);

        msg1.what = Constants.CONNECTING_HANDLER;
        msg1.sendToTarget();

        try {
            // Connect the device through the socket. This will block
            // until it succeeds or throws an exception
            mmSocket.connect();

            // handler
            Message msg2 = new Message();
            msg2.setTarget(mHandler);
            msg2.what = Constants.CONNECTED_HANDLER;
            msg2.setTarget(mHandler);
            msg2.sendToTarget();

        } catch (IOException connectException) {
            // Unable to connect; close the socket and get out
            System.out.println("alex - NO connected");
            Message msgException = new Message();
            msgException.setTarget(mHandler);
            msgException.what = Constants.DISCONNECTED_HANDLER;
            msgException.sendToTarget();

            try {
                mmSocket.close();
            } catch (IOException closeException) {
            }
            return;
        }
    }

    /** Will cancel an in-progress connection, and close the socket */
    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) {
        }
    }

    public BluetoothSocket getBTSocket() {
        return mmSocket;
    }
}

我感觉这可能是由于我使用的UUID。适用于我的UUID如下:

  1. 04c6032b00004000800000805f9b34fc
  2. 0000110500001000800000805f9b34fb

我在两个应用程序中都使用了类似的UUID。任何想法可能导致此问题?

斯瓦希多斯

奇怪的是,今天,当我使用蓝牙加密狗而不是我自己的笔记本电脑的蓝牙时,问题得以解决。因此,就软件组件而言,这不是问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Maven支持多个应用服务器

来自分类Dev

错误:服务器在关闭时返回错误:当前没有应用服务器连接到 Azure 服务“@aspnet/signalr”

来自分类Dev

Android聊天应用服务器的建议?

来自分类Dev

研究支持Java 8的应用服务器

来自分类Dev

线程池配置Java应用服务器

来自分类Dev

何时断开Bosh连接从应用服务器建立以使用预绑定?

来自分类Dev

JBOSS应用服务器和Servlet

来自分类Dev

marklogic用户应用服务器

来自分类Dev

流星作为纯应用服务器

来自分类Dev

Quarkus内部使用哪个应用服务器?

来自分类Dev

Delphi SOAP应用服务器中的WebModule

来自分类Dev

Hapshmap 与 tomcat 应用服务器

来自分类Dev

分离 REST API 和应用服务器

来自分类Dev

快递应用服务器。侦听所有接口,而不是仅侦听localhost

来自分类Dev

使用 Selenium 在所有应用服务器上加载缓存

来自分类Dev

我的Rails 4.2.5应用服务器在开发模式下一直连接到生产db而不是开发db

来自分类Dev

与应用服务器不同的服务器上的视频转换

来自分类Dev

即使应用服务器 puma 关闭,rails 服务器如何提供页面?

来自分类Dev

结合 Angular 2 应用服务器和 REST 服务器模块

来自分类Dev

在有限的时间内将PDF存储在应用服务器上,并使其可供下载

来自分类Dev

在有限的时间内将PDF存储在应用服务器上,并使其可供下载

来自分类Dev

将Android应用重新连接到配对的蓝牙设备

来自分类Dev

将Android应用重新连接到配对的蓝牙设备

来自分类Dev

获取应用服务器服务请求的IP

来自分类Dev

如何验证我的Tomcat应用服务器正确支持FIPS 140-2?

来自分类Dev

防止jboss应用服务器被负载均衡器占用?

来自分类Dev

如何使用HTTP“主机”标头(使用GoLang)定位特定的应用服务器

来自分类Dev

将Couchbase用作应用服务器时是否提供图片?

来自分类Dev

什么时候需要用于Firebase Cloud Messaging的应用服务器?

Related 相关文章

  1. 1

    通过Maven支持多个应用服务器

  2. 2

    错误:服务器在关闭时返回错误:当前没有应用服务器连接到 Azure 服务“@aspnet/signalr”

  3. 3

    Android聊天应用服务器的建议?

  4. 4

    研究支持Java 8的应用服务器

  5. 5

    线程池配置Java应用服务器

  6. 6

    何时断开Bosh连接从应用服务器建立以使用预绑定?

  7. 7

    JBOSS应用服务器和Servlet

  8. 8

    marklogic用户应用服务器

  9. 9

    流星作为纯应用服务器

  10. 10

    Quarkus内部使用哪个应用服务器?

  11. 11

    Delphi SOAP应用服务器中的WebModule

  12. 12

    Hapshmap 与 tomcat 应用服务器

  13. 13

    分离 REST API 和应用服务器

  14. 14

    快递应用服务器。侦听所有接口,而不是仅侦听localhost

  15. 15

    使用 Selenium 在所有应用服务器上加载缓存

  16. 16

    我的Rails 4.2.5应用服务器在开发模式下一直连接到生产db而不是开发db

  17. 17

    与应用服务器不同的服务器上的视频转换

  18. 18

    即使应用服务器 puma 关闭,rails 服务器如何提供页面?

  19. 19

    结合 Angular 2 应用服务器和 REST 服务器模块

  20. 20

    在有限的时间内将PDF存储在应用服务器上,并使其可供下载

  21. 21

    在有限的时间内将PDF存储在应用服务器上,并使其可供下载

  22. 22

    将Android应用重新连接到配对的蓝牙设备

  23. 23

    将Android应用重新连接到配对的蓝牙设备

  24. 24

    获取应用服务器服务请求的IP

  25. 25

    如何验证我的Tomcat应用服务器正确支持FIPS 140-2?

  26. 26

    防止jboss应用服务器被负载均衡器占用?

  27. 27

    如何使用HTTP“主机”标头(使用GoLang)定位特定的应用服务器

  28. 28

    将Couchbase用作应用服务器时是否提供图片?

  29. 29

    什么时候需要用于Firebase Cloud Messaging的应用服务器?

热门标签

归档