要在Android中通过蓝牙连接两台设备并启用互联网访问,可以按照以下步骤进行操作:
在build.gradle文件的dependencies中添加以下依赖项:
implementation 'com.android.volley:volley:1.2.0'
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
private BluetoothAdapter bluetoothAdapter;
private BluetoothSocket bluetoothSocket;
private BluetoothDevice bluetoothDevice;
private ConnectedThread connectedThread;
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static final int MESSAGE_READ = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
// 设备不支持蓝牙
Toast.makeText(this, "设备不支持蓝牙", Toast.LENGTH_SHORT).show();
} else {
if (!bluetoothAdapter.isEnabled()) {
// 请求打开蓝牙
Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetoothIntent, REQUEST_ENABLE_BT);
} else {
// 已经打开蓝牙
connectBluetoothDevice();
}
}
}
private void connectBluetoothDevice() {
Set pairedDevices = bluetoothAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
if (device.getName().equals("设备名称")) {
bluetoothDevice = device;
break;
}
}
}
if (bluetoothDevice != null) {
try {
bluetoothSocket = bluetoothDevice.createRfcommSocketToServiceRecord(MY_UUID);
bluetoothSocket.connect();
connectedThread = new ConnectedThread(bluetoothSocket);
connectedThread.start();
Toast.makeText(this, "蓝牙连接成功", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "蓝牙连接失败", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "未找到对应设备", Toast.LENGTH_SHORT).show();
}
}
private class ConnectedThread extends Thread {
private final InputStream inputStream;
private final OutputStream outputStream;
public ConnectedThread(BluetoothSocket socket) {
InputStream tempInputStream = null;
OutputStream tempOutputStream = null;
try {
tempInputStream = socket.getInputStream();
tempOutputStream = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
inputStream = tempInputStream;
outputStream = tempOutputStream;
}
@Override
public void run() {
byte[] buffer = new byte[1024];
int bytes;
while (true) {
try {
bytes = inputStream.read(buffer);
mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget();
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
public void write(byte[] bytes) {
try {
outputStream.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
public void cancel() {
try {
bluetoothSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == MESSAGE_READ) {
byte[] readBuffer = (byte[]) msg.obj;
String received