通过蓝牙适配器在Android设备和PC之间进行蓝牙数据传输

3
我有一个需求:我需要通过蓝牙适配器将一些图片和文件从我的Android设备发送到PC。根据Android文档,在两个设备之间建立蓝牙连接,你需要将一个设备作为客户端,另一个设备作为服务器。我可以通过在两个不同的设备之间实现BluetoothSocket连接来连接两个设备。但是,我该如何通过代码让我的PC充当服务器呢?我该如何使用代码实现这一点?到目前为止,以下是我用于通过BluetoothSocket作为客户端发出请求的代码。
public class ConnectThread extends Thread{
    private  BluetoothSocket mmSocket=null;
                public  static final UUID MY_UUID = UUID.fromString("6983e974-9696-4547-afc2-143235069a79");
                 @Override
                public void run() {
                    // TODO Auto-generated method stub
                    super.run();
                    // Get a BluetoothSocket to connect with the given BluetoothDevice

                    BluetoothDevice bluetoothdevice=BluetoothConnection.btAdapter.getRemoteDevice("14:F6:5A:63:0F:8E");
                    try {
                        BluetoothSocket socket=bluetoothdevice.createRfcommSocketToServiceRecord(ConnectThread.MY_UUID);
                        BluetoothAdapter adapter=BluetoothAdapter.getDefaultAdapter();
                        if(adapter!=null)
                        {
                        adapter.cancelDiscovery();  
                        }

                        if(socket!=null)
                        {

                            socket.connect();
                            Log.i("***Socket Connection Successful**", "Socket Connection Successful");
                        }
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        Log.e("***Error**","Socket Connection failed");
                        e.printStackTrace();
                    }

                }
     }
2个回答

0
我建议如果适用于您的情况,让安卓处理这个问题。
首先检查设备上是否可用蓝牙。
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();

if (btAdapter == null) {
   // No Bluetooth available on the device
}

如果可用,我们可以启动一个意图并让Android操作系统处理发送您的文件。
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
File file = new File("<THE PATH TO YOUR FILE>");

sharingIntent.setType("text/plain");
sharingIntent.setPackage("com.android.bluetooth");
//you can also pass a ArrayList<Uri> uriList for multiple files.
sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
startActivity(Intent.createChooser(sharingIntent, "Share file"));

这将显示一个新的活动,提示用户选择蓝牙设备。由于对话框只会显示已配对的设备,因此这将是一个前提条件。


您可以通过在BluetoothDevice上调用createBond()来初始化配对(有关更多详细信息,请参见此处createBond() apidoc)。
这可能看起来像这样。
BluetoothDevice bluetoothdevice = BluetoothConnection.btAdapter.getRemoteDevice("14:F6:5A:63:0F:8E");
bluetoothdevice.createBond();

为触发发送,请在 ACTION_BOND_STATE_CHANGED 上创建一个 BroadcastReceiver

final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
     public void onReceive(Context context, Intent intent) {
       int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);
       if (bondState == BluetoothDevice.BOND_BONDED) {
            //Trigger the sending via the above mentioned method
        }
    }
};

我需要编写与套接字连接相关的程序,而不是与Android蓝牙相关的程序。 - abh22ishek

0

因为你在使用Android,我假设你熟悉Java。所以我替你在互联网上找到了一个简单的蓝牙服务器示例:

源代码

不幸的是,它使用了另一个jar文件来访问蓝牙功能。但我在一篇博客中找到了更多关于它的信息:

Bluecove是JSR-82的实现。 JSR-82是用于定义与蓝牙设备通信的API的Java规范。

上述文字的来源

作为Java新手阅读代码告诉我,设置蓝牙服务器(在Java中)需要以下步骤:

  1. 获取你的硬件(getLocalDevice())
  2. 使其对其他人可见,以便每个蓝牙适配器都可以找到它(setDiscoverable(DiscoveryAgent.GIAC))
  3. 打开连接以等待传入设备((StreamConnectionNotifier)Connector.open(url);)
  4. 接受传入的连接并处理它们(conn = server.acceptAndOpen();)

这就像通过套接字构建自己的TCP服务器。我只是读了一下并思考了一下。我没有测试过!所以我不能确定这是否能正常工作。但我认为这会指引你走向正确的方向,希望如此。

此外,我在Oracle页面上找到了一篇关于蓝牙和Java的文章。

玩得开心!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接