【问题标题】:Android to PC RFCOMM ChannelAndroid 到 PC RFCOMM 频道
【发布时间】:2014-03-22 22:35:11
【问题描述】:

所以我正在开发一个通过蓝牙直接连接以接受来自 RFCOMM 通道的字符串命令并发送响应的应用程序。

所以这些是我目前正在使用的 2 个类

蓝牙管理器

import android.bluetooth.*;
import android.content.Intent;

public class Reader_BluetoothManager {

    protected Reader_MainScreen main;
    protected BluetoothAdapter bAdapter;
    private Reader_AcceptThread bAccept;

    public Reader_BluetoothManager(Reader_MainScreen main) {
        this.main = main;
        initiate();
    }

    public void initiate(){
        checkForBluetooth();
        enableBluetooth();
    }

    public void log(String l){
        main.log(l);
    }

    public void checkForBluetooth(){
        bAdapter = BluetoothAdapter.getDefaultAdapter();
        if (bAdapter == null) {
            main.log("No Bluetooth supported!");
            return;
        }
        main.log("Bluetooth supported...");
    }

    public void enableBluetooth(){
        if (!bAdapter.isEnabled()) {
            main.log("Bluetooth not enabled... requesting activation");
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            main.startActivityForResult(enableBtIntent, main.BLUETOOTH_ENABLE_CODE);
        }
    }

    public void enableConnection(){
        main.log("Connecting...");
        if (bAccept != null)
            bAccept.interrupt();
        bAccept = new Reader_AcceptThread(this);
        bAccept.start();
    }

    public void stopConnection(){
        if (bAccept != null)
            bAccept.interrupt();
    }
}

AcceptThread

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

import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;

public class Reader_AcceptThread extends Thread{

    private BluetoothServerSocket serverSocket;
    private BluetoothSocket socket;
    private BluetoothDevice device;
    private Reader_BluetoothManager main;


    public Reader_AcceptThread(Reader_BluetoothManager main) {
        this.main = main;
    }

    public void run(){
        try {
            serverSocket = main.bAdapter.listenUsingRfcommWithServiceRecord("XXXXXX", UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
            main.log("checkPoint 1");
            socket = serverSocket.accept();
            main.log("checkPoint 2");
            device = socket.getRemoteDevice();
            main.log("checkPoint 3");
            main.log("connection established...");
            main.log(socket.toString());
        } catch (IOException e) {
            main.log("error...");
            main.log(e.toString());
            main.main.stopConnection();
            interrupt();
        }
        while (!isInterrupted()){
            try {
                sleep(2000);
            } catch (InterruptedException e) {
                interrupt();
                break;
            }
            main.log("ping");
        }
    }
}

我根据 Google 文档指南构建了这些。 同样在我的笔记本电脑上,我正在执行以下操作:

这就是我的手机上发生的事情:

这是,当我尝试从我的 Windows PC 连接时发生了什么:

正如你在手机屏幕截图中看到的那样,我被困在socket = serverSocket.accept()

【问题讨论】:

    标签: java android bluetooth rfcomm spp


    【解决方案1】:

    您使用的 UUID 是服务的 UUID - 如果您想使用默认的 RFCOMM 通道,您应该使用 SPP UUID "00001101-0000-1000-8000-00805F9B34FB" 而不是 UUID.randomUUID();

    serverSocket = main.bAdapter.listenUsingRfcommWithServiceRecord("Connection Test", UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
    

    【讨论】:

    • 好的,谢谢.. 我不知道我必须为此使用固定的 UUID.. 我能够从 Windows PC 连接。我是对的,当我尝试通过echo TEXT > COM4 发送消息时?
    • 是的,您可以这样做或使用超级终端并通过它进行连接。不介意也接受答案;)
    • 介意另一个问题吗?...我现在确实有一个从我的 PC 到我的手机的 Com 端口“COM4”,但手机仍然卡在 checkPoint1 上。当我尝试echo Hello > COM4 时,cmd 说:“系统找不到该文件”。我也尝试通过腻子进行连接。但是腻子中止“无法打开与 COM4 的连接,无法打开串行端口”
    • 你必须在获得的套接字上打开一个输入流 socket.getInputStream();然后腻子应该能够连接
    • 但我什至没有通过 socket = serverSocket.accept(); :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 2018-08-26
    • 2013-04-08
    • 2011-06-20
    • 2012-04-27
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多