connectlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final BluetoothDevice bluetoothDevice = list.get(position);
new Thread(new Runnable() {
@Override
public void run() {
try {
//Socket连接
BluetoothSocket socket = bluetoothDevice.createInsecureRfcommSocketToServiceRecord(uuid);
socket.connect();
//发送数据
if(socket.isConnected()){
//首先发送总长度
socket.getOutputStream().write((message.getBytes().length+"").getBytes());
Thread.sleep(100);
//再发送数据
socket.getOutputStream().write(message.getBytes());
}else {
Toast.makeText(MainActivity.this, “连接失败!”, Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
});
//动态获取权限
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
if(ActivityCompat.checkSelfPermission(this,strings[0])!= PackageManager.PERMISSION_GRANTED){
requestPermissions(strings,101);
}
}
//获取本机蓝牙设备
manager= (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
adapter=manager.getAdapter();
//注册广播
myRecevier=new MyRecevier();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(myRecevier,intentFilter);
//打开蓝牙点击事件
open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);//打开蓝牙
intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);//允许蓝牙被搜索
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);//允许被搜索时间在200秒内
startActivityForResult(intent,100);
//开启服务
server();
}
});
//关闭蓝牙点击事件
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.disable();
}
});
//显示已匹配设备事件
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.clear();
Set bondedDevices = adapter.getBondedDevices();
list.addAll(bondedDevices);
myAdapter.notifyDataSetChanged();
}
});
//显示附近设备事件
discovery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listdiscovery.clear();
adapter.startDiscovery();//搜索蓝牙设备
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myRecevier);
}
private void server() {
new Thread(){
@Override
public void run() {
try {
//获得服务端
BluetoothServerSocket serverSocket = adapter.listenUsingInsecureRfcommWithServiceRecord(adapter.getName(), uuid);
//无限死循环接收客户端连接
while (true){
BluetoothSocket bluetoothSocket = serverSocket.accept();
new ServerThread(bluetoothSocket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
class MyRecevier extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//判断找到频道
if(intent.getAction().equals(BluetoothDevice.ACTION_FOUND)){
//获得远程设备
BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
listdiscovery.add(bluetoothDevice);
myAdapter_discovery.notifyDataSetChanged();
}
}
}
}