【问题标题】:how to send data (a string) to a paired device in android?如何将数据(字符串)发送到android中的配对设备?
【发布时间】:2014-08-30 09:00:34
【问题描述】:

我是第一次使用蓝牙。我得到了配对设备的列表。现在我的要求是我需要向设备发送一些数据(字符串)。我怎样才能做到这一点?我尝试搜索但没有找到任何有用的东西。有人可以帮忙吗?

【问题讨论】:

标签: android bluetooth android-bluetooth


【解决方案1】:

这样的事情可能就足够了:

DataOutputStream os;

BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();

BroadcastReceiver discoveryResult = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String remoteDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
        BluetoothDevice remoteDevice;

        remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

        Toast.makeText(getApplicationContext(), "Discovered: " + remoteDeviceName + " address " + remoteDevice.getAddress(), Toast.LENGTH_SHORT).show();

        try{
            BluetoothDevice device = bluetooth.getRemoteDevice(remoteDevice.getAddress());

            Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});

            BluetoothSocket clientSocket =  (BluetoothSocket) m.invoke(device, 1);

            clientSocket.connect();

            os = new DataOutputStream(clientSocket.getOutputStream());

            new clientSock().start();
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("BLUETOOTH", e.getMessage());
        }
    }
};

registerReceiver(discoveryResult, new IntentFilter(BluetoothDevice.ACTION_FOUND));

bluetooth.enable();
if (!bluetooth.isDiscovering()) {
    bluetooth.startDiscovery();
}

public class clientSock extends Thread {
    public void run () {
        try {
            os.writeBytes("anything you want"); // anything you want
            os.flush();
        } catch (Exception e1) {
            e1.printStackTrace();
            return;
        }
    }
}

您还需要大量导入,例如:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.List;
import java.util.UUID;

import android.os.Bundle;
import android.os.StrictMode;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;

请注意,此示例代码并非所有导入都是必需的,您的 IDE 可能会帮助您为您整理它们。

os.writeBytes("anything you want"); // anything you want 行上传递数据。

您还需要Permissions

【讨论】:

  • 更新的答案,我认为实际上并不需要 UUID,但它是旧代码.. 大约一岁,所以我实际上不记得了,你也必须解决另一面自己的交流。
  • 我们可以在后台执行此操作吗?我有一个用例,我需要在后台连接到设备并将数据传递给它。
  • 但是这段代码什么时候调用 os.writeBytes("") 呢?我可以在按钮上调用它吗?如何调用?
  • @Daniëlle clientSock 类扩展了 Thread 类。您可以通过创建实例并启动它来运行线程:new clientSock().start();
猜你喜欢
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 2012-04-09
  • 2014-08-29
  • 1970-01-01
  • 2012-08-19
  • 2012-12-03
  • 1970-01-01
相关资源
最近更新 更多