我需要知道如何在两台设备之间通过蓝牙连接和发送数据。目前,我唯一知道的是如何打开并找到蓝牙设备。
我正在制作一个使用蓝牙在两个设备之间播放的小视频游戏,但我不明白如何在它们之间建立连接,如何使用bluetoothSockets,bluetoothServerSocket以及androids带给我的线程。
这是我所做的代码:
public class MainActivity extends AppCompatActivity {
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
static ListView dispositivos;
ArrayList<String> adapter=new ArrayList();
ArrayAdapter<String> adap;
private static final int REQUEST_CONNECT_DEVICE_SECURE = 1;
private static final int REQUEST_CONNECT_DEVICE_INSECURE = 2;
private static final int REQUEST_ENABLE_BT = 3;
public void con(View view){
adapter.clear();
if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
//checamos primero los dispositivos enlazados
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
adapter.add(device.getName() + "\n" + device.getAddress());
}
}
//vamos a buscar otros dispositivos
mBluetoothAdapter.startDiscovery();
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy
adap=new ArrayAdapter<>(MainActivity.this,android.R.layout.simple_list_item_1, adapter);
dispositivos.setAdapter(adap);
}
//metodo de busqueda que agrega cada dispositivo que se encuentre a la lista
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
adap.add(device.getName() + "\n" + device.getAddress());
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dispositivos=(ListView)findViewById(R.id.lista);
}
}
答案 0 :(得分:1)
要在两台设备之间建立蓝牙连接并交换数据,您需要执行以下步骤:
BluetoothServerSocket
)-1 您已经说过已经知道如何搜索设备,但here还有文档页面。 如果目标设备已配对但您不必执行发现,请向BluetoohAdapter询问paired devices
-2 蓝牙连接必须从某个地方开始,因此设备必须对其进行初始化并充当服务器;要做到这一点,你必须创建一个BluetoothServerSocket
。
你可以找到一步一步的解释here;基本上一旦你创建了它,这个服务器套接字就会继续监听传入连接的请求,如果请求被接受,则返回一个有效的BluetoothSocket
。
请注意,连接的请求必须来自其他设备,因此智能手机一如既往地here负责此文档。
-3 使用您的两个新BluetoothSocket
,您可以为每个设备检索一对流,一个输入一个输出和一个输出一个。
现在,您必须manage the connection从特定流
重要提示:蓝牙活动繁重且异步,因此必须在主线程上执行。
创建Thread
并覆盖其run()
方法以执行每项操作:
搜索
侦听传入请求(服务器端)
管理连接(双方)
在我链接的每个文档段落的末尾,您可以找到一些代码示例,教您如何执行该特定任务。
开始尝试,如果您遇到错误或卡住了,请求帮助。