笔记
开启蓝牙之后要用广播来获取和填充数据,管理蓝牙的主要2个工具类
BlueToothManager,BlueToothAdapter
代码
MainActivity
package com.example.work;
import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.example.work.adapter.BlueAdapter;
import com.example.work.broadcast.BlueToothReceiver;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btOpen;
private Button btClose;
private Button btDiscovery;
private Button btBond;
private String[] permissions = {
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.BLUETOOTH
};
//广播
private BlueToothReceiver blueToothReceiver;
//数据源
private List<BluetoothDevice> discovery_list = new ArrayList<>();
private List<BluetoothDevice> bond_list = new ArrayList<>();
//适配器
private BlueAdapter discoery_adapter;
private BlueAdapter bond_adapter;
private int REQUEST_CODE = 100;
private BluetoothAdapter adapter;
private BluetoothManager manager;
private ListView lvFind;
private ListView lvBond;
private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");//蓝牙通讯规范
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissions, REQUEST_CODE);
}
initView();
manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
adapter = manager.getAdapter();
blueToothReceiver = new BlueToothReceiver(discovery_list, discoery_adapter,lvFind);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(blueToothReceiver, intentFilter);
lvFindConnect();
lvBondConnect();
}
private void lvBondConnect() {
lvBond.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
BluetoothDevice device = bond_list.get(position);
try {
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
socket.connect(); //连接蓝牙
if(socket.isConnected()) {
OutputStream os = socket.getOutputStream();
os.write(("你好呀" + device.getName()).getBytes());
os.close();
}else{
Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
}
}
});
}
private void lvFindConnect() {
lvFind.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "正在配对...", Toast.LENGTH_SHORT).show();
BluetoothDevice device = discovery_list.get(position);
device.createBond();
}
});
}
private void initView() {
btOpen = findViewById(R.id.bt_open);
btClose = findViewById(R.id.bt_close);
btDiscovery = findViewById(R.id.bt_discovery);
btBond = findViewById(R.id.bt_bond);
lvFind = findViewById(R.id.lv_find);
lvBond = findViewById(R.id.lv_bond);
btOpen.setOnClickListener(this);
btClose.setOnClickListener(this);
btDiscovery.setOnClickListener(this);
btBond.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_open:
openIt();
break;
case R.id.bt_close:
closeIt();
break;
case R.id.bt_discovery:
discoveryIt();
break;
case R.id.bt_bond:
bondIt();
break;
}
}
private void bondIt() {
bond_list.clear();
Set<BluetoothDevice> bondedDevices = adapter.getBondedDevices();
bond_list.addAll(bondedDevices);
bond_adapter = new BlueAdapter(bond_list,this);
lvBond.setAdapter(bond_adapter);
bond_adapter.notifyDataSetChanged();
}
private void discoveryIt() {
discovery_list.clear();//清空数据
adapter.startDiscovery();
}
private void closeIt() {
adapter.disable();//关闭蓝牙
}
private void openIt() {
Toast.makeText(this, "我执行了", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);//对外开放 说明可以识别到
intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE); //可用
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 250);//持续时间
startActivityForResult(intent, 100);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(blueToothReceiver);
}
}
广播
package com.example.work.broadcast;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Parcelable;
import android.util.Log;
import android.widget.ListView;
import com.example.work.adapter.BlueAdapter;
import java.util.List;
public class BlueToothReceiver extends BroadcastReceiver {
public BlueToothReceiver(){
}
private List<BluetoothDevice> devices;
private BlueAdapter adapter;
private ListView lv_find;
public BlueToothReceiver(List<BluetoothDevice> devices, BlueAdapter adapter, ListView lv_find) {
this.devices = devices;
this.adapter = adapter;
this.lv_find = lv_find;
}
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(BluetoothDevice.ACTION_FOUND)){
Log.i("---", "onReceive: 我执行了");
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
devices.add(device);
adapter = new BlueAdapter(devices,context);
lv_find.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
}
服务器
package com.example.work;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
public class ServiceActivity extends AppCompatActivity {
private BluetoothAdapter adapter;
private BluetoothManager manager;
private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");//蓝牙通讯规范
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_service);
initView();
manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
adapter = manager.getAdapter();
//
new Thread(new Runnable() {
@Override
public void run() {
try {
BluetoothServerSocket socket = adapter.listenUsingInsecureRfcommWithServiceRecord(adapter.getName(), uuid);
BluetoothSocket accept = socket.accept();
accept.connect();
if (accept.isConnected()) {
InputStream inputStream = accept.getInputStream();
byte[] b = new byte[1024];
int read = inputStream.read(b);
String str = new String(b, 0, read);
Toast.makeText(ServiceActivity.this, ""+str, Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void initView() {
imageView = findViewById(R.id.image_view);
}
}
本文详细介绍了如何使用Android系统进行蓝牙开发,包括蓝牙设备的发现、配对、连接及数据传输过程。通过MainActivity和BlueToothReceiver类,实现了蓝牙设备的搜索、配对列表展示及与已配对设备的数据通信。
1548

被折叠的 条评论
为什么被折叠?



