适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<BluetoothDevice> list;
private Context context;
private LayoutInflater layoutInflater;
public MyAdapter(List<BluetoothDevice> list, Context context) {
this.list = list;
this.context = context;
layoutInflater = LayoutInflater.from(context);
}
private MyOnClick myOnClick;
public void setMyOnClick(MyOnClick myOnClick) {
this.myOnClick = myOnClick;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.layout_recyclerview,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
holder.textView.setText(list.get(position).getName());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myOnClick.OnClickListener(position);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView textView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
}
蓝牙功能
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");
private String[] premisson = new String[]{
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
};
public static final int REQUESR_CODE = 101;
public static final int OPEN_CODE= 102;
private BluetoothManager bluetoothManager;
private BluetoothAdapter bluetoothAdapter;
private List<BluetoothDevice> list_dis = new ArrayList<>();
private List<BluetoothDevice> list_bond = new ArrayList<>();
private MyAdapter adapter_dis;
private MyAdapter adapter_bond;
private Button bt_open;
private Button bt_close;
private Button bt_find;
private Button bt_start;
private RecyclerView rv_dis;
private RecyclerView rv_bond;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestPermissions(premisson,REQUESR_CODE);
initView();
bluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter();
MyReceive myReceive = new MyReceive();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(myReceive,intentFilter);
}
private void initView() {
bt_open = (Button) findViewById(R.id.bt_open);
bt_close = (Button) findViewById(R.id.bt_close);
bt_find = (Button) findViewById(R.id.bt_find);
bt_start = (Button) findViewById(R.id.bt_start);
rv_dis = (RecyclerView) findViewById(R.id.rv_dis);
rv_dis.setLayoutManager(new LinearLayoutManager(this));
adapter_dis = new MyAdapter(list_dis,this);
rv_dis.setAdapter(adapter_dis);
rv_bond = (RecyclerView) findViewById(R.id.rv_bond);
rv_bond.setLayoutManager(new LinearLayoutManager(this));
adapter_bond = new MyAdapter(list_bond,this);
rv_bond.setAdapter(adapter_bond);
bt_open.setOnClickListener(this);
bt_close.setOnClickListener(this);
bt_find.setOnClickListener(this);
bt_start.setOnClickListener(this);
adapter_dis.setMyOnClick(new MyOnClick() {
@Override
public void OnClickListener(int i) {
BluetoothDevice device = list_dis.get(i);
device.createBond();
}
});
adapter_bond.setMyOnClick(new MyOnClick() {
@Override
public void OnClickListener(int i) {
BluetoothDevice device = list_bond.get(i);
try {
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
socket.connect();
if (socket.isConnected()){
socket.getOutputStream().write("你好你好".getBytes());
}else {
Toast.makeText(MainActivity.this, "发送失败", Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
Toast.makeText(MainActivity.this, "发送失败了呢", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_open:
Intent intent = new Intent();
intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);
intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,120);
startActivityForResult(intent,OPEN_CODE);
break;
case R.id.bt_close:
bluetoothAdapter.disable();
break;
case R.id.bt_find:
list_dis.clear();
bluetoothAdapter.startDiscovery();
break;
case R.id.bt_start:
list_bond.clear();
Set<BluetoothDevice> bondedDevices = bluetoothAdapter.getBondedDevices();
list_bond.addAll(bondedDevices);
adapter_bond.notifyDataSetChanged();
break;
}
}
class MyReceive extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(BluetoothDevice.ACTION_FOUND)){
BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
list_dis.add(bluetoothDevice);
adapter_dis.notifyDataSetChanged();
}
}
}
}
依赖+布局
implementation 'com.android.support:recyclerview-v7:29.0.0'
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="80dp">
<Button
android:id="@+id/bt_open"
android:text="打开"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/bt_close"
android:text="关闭"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/bt_find"
android:text="搜索"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/bt_start"
android:text="已配对"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<TextView
android:text="附近设备"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_dis"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
<TextView
android:text="已配对"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_bond"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>