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

时间:2015-11-20 12:59:31

标签: android bluetooth

我有一个要求 - 我必须通过我的Android设备通过蓝牙适配器将一些图像和文件发送到PC。 根据android文档,为了通过蓝牙在两个设备之间建立连接,你需要将一个作为客户端,另一个作为服务器。 我可以通过在两个不同设备之间实现BluetoothSocket连接来连接两个设备。 但是我如何让我的Pc通过代码充当服务器。

我将如何在代码的帮助下实现这一目标。

所以,这是我通过BluetoothSocket提出请求作为客户端的代码

user.Address.Line1

2 个答案:

答案 0 :(得分:0)

因为您使用Android,我认为您熟悉Java。所以我为你看了互联网,并找到了一个如何制作一个简单的蓝牙服务器的示例:

Source

不幸的是,它正在使用另一个jar来访问蓝牙功能。但是我在博客上发现了更多关于它的信息:

  

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

Source of the text above

阅读代码作为Java新手告诉我你需要设置Bluetotth服务器的步骤(用Java):

  1. 获取硬件(getLocalDevice())
  2. 让其他人看到它,所以每个蓝牙适配器都可以找到它(setDiscoverable(DiscoveryAgent.GIAC))
  3. 打开Connection以等待传入设备((StreamConnectionNotifier)Connector.open(url);)
  4. 接受传入连接并处理它们(conn = server.acceptAndOpen();)
  5. 所以它就像通过套接字构建自己的TCP服务器。我只是读了它并想了想。 我没有测试过它!所以我不能说这是否会正常运行。但我认为这有点让你以正确的方式指出。

    此外,我在oracle page

    上发现了一篇关于蓝牙和Java的文章

    玩得开心!

答案 1 :(得分:0)

我建议让android处理这个,如果适用于你的情况。

首先检查设备上是否有蓝牙

BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();

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

如果它可用,我们可以启动一个intent,让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"));

这将显示一个新活动,提示用户选择蓝牙设备。由于对话框仅显示配对设备,因此这将是一个先决条件。

您可以通过createBond()上的BluetoothDevice来致电配对(有关详细信息,请参阅此处createBond() apidoc

这可能看起来像这样

BluetoothDevice bluetoothdevice = BluetoothConnection.btAdapter.getRemoteDevice("14:F6:5A:63:0F:8E");
bluetoothdevice.createBond();

触发发送,在BroadcastReceiver

上创建ACTION_BOND_STATE_CHANGED
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
        }
    }
};