蓝牙
程序员文章站
2022-07-10 19:02:25
蓝牙一、设置权限
蓝牙
一、设置权限
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
二、布局
<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">
<Button
android:id="@+id/open_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="打开蓝牙" />
<Button
android:id="@+id/close_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="关闭蓝牙" />
<Button
android:id="@+id/getName_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="获取本机蓝牙名称" />
<Button
android:id="@+id/nearby_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="扫描附近蓝牙" />
<Button
android:id="@+id/show_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="展示已配对设备" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mynearbyReceiver_id"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</androidx.recyclerview.widget.RecyclerView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/myshowReceiver_id"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
三、判断权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
}, 100);
}
四、打开,关闭蓝牙
//打开蓝牙
openId.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);
startActivity(intent);
}
});
//关闭蓝牙
closeId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获得本机蓝牙适配器
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
//关闭本机蓝牙设备
defaultAdapter.disable();
}
});
五、获取本机蓝牙名字
//获取本机名字
getNameId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
String name = defaultAdapter.getName();
String address = defaultAdapter.getAddress();
Toast.makeText(MainActivity.this, name + ":" + address, Toast.LENGTH_SHORT).show();
}
});
六、扫描附近蓝牙
//注册内容提供者
myReceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(myReceiver, intentFilter);
nearbyId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
//开始扫描
defaultAdapter.startDiscovery();
}
});
内容提供者
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(BluetoothDevice.ACTION_FOUND)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.i(TAG, "onReceive: " + device.getName() + ":" + device.getAddress());
nearbyId_list.add(device);
nearbyId_adapter.notifyDataSetChanged();
}
}
}
七、显示配对蓝牙
//显示已配对的蓝牙设备
showId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> bondedDevices = defaultAdapter.getBondedDevices();
for (BluetoothDevice bondedDevice : bondedDevices) {
Log.i(TAG, "onClick: " + "配对" + bondedDevice.getName() + ":" + bondedDevice.getAddress());
}
showId_list.addAll(bondedDevices);
showId_adapter.notifyDataSetChanged();
}
});
监听接口
public interface MyListener {
void onClick(int position, View view);
}
适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private List<BluetoothDevice> list;
private MyListener myListener;
public void setMyListener(MyListener myListener) {
this.myListener = myListener;
}
public MyAdapter(Context context, List<BluetoothDevice> list) {
this.context = context;
this.list = list;
}
//连接布局
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.layout_item, null);
return new MyViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
holder.textView_item.setText(list.get(position).getName() + ":" + list.get(position).getAddress());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myListener.onClick(position, v);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView textView_item;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
textView_item = itemView.findViewById(R.id.text_item);
}
}
}
Activity代码
//附近蓝牙设备展示
nearbyId_adapter = new MyAdapter(this, nearbyId_list);
mynearbyReceiverId.setAdapter(nearbyId_adapter);
mynearbyReceiverId.setLayoutManager(new LinearLayoutManager(this));
mynearbyReceiverId.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
nearbyId_adapter.setMyListener(new MyListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onClick(int position, View view) {
Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
//发起连接请求
nearbyId_list.get(position).createBond();
}
});
//展示已配对设备
showId_adapter = new MyAdapter(this, showId_list);
myshowReceiverId.setAdapter(showId_adapter);
myshowReceiverId.setLayoutManager(new LinearLayoutManager(this));
myshowReceiverId.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
showId_adapter.setMyListener(new MyListener() {
@Override
public void onClick(int position, View view) {
Toast.makeText(MainActivity.this, "准备建立发送数据", Toast.LENGTH_SHORT).show();
}
});
}
Activity整体代码
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private Button openId;
private Button closeId;
private Button getNameId;
private Button nearbyId;
private Button showId;
private RecyclerView mynearbyReceiverId;
private RecyclerView myshowReceiverId;
private MyReceiver myReceiver;
private List<BluetoothDevice> nearbyId_list = new ArrayList<>();
private List<BluetoothDevice> showId_list = new ArrayList<>();
private MyAdapter nearbyId_adapter;
private MyAdapter showId_adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
openId = (Button) findViewById(R.id.open_id);
closeId = (Button) findViewById(R.id.close_id);
getNameId = (Button) findViewById(R.id.getName_id);
nearbyId = (Button) findViewById(R.id.nearby_id);
showId = (Button) findViewById(R.id.show_id);
mynearbyReceiverId = (RecyclerView) findViewById(R.id.mynearbyReceiver_id);
myshowReceiverId = (RecyclerView) findViewById(R.id.myshowReceiver_id);
myReceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(myReceiver, intentFilter);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
}, 100);
}
//打开蓝牙
openId.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);
startActivity(intent);
}
});
//关闭蓝牙
closeId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获得本机蓝牙适配器
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
//关闭本机蓝牙设备
defaultAdapter.disable();
}
});
//获取本机名字
getNameId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
String name = defaultAdapter.getName();
String address = defaultAdapter.getAddress();
Toast.makeText(MainActivity.this, name + ":" + address, Toast.LENGTH_SHORT).show();
}
});
//扫描附近蓝牙
nearbyId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
//开始扫描
defaultAdapter.startDiscovery();
}
});
//显示已配对的蓝牙设备
showId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> bondedDevices = defaultAdapter.getBondedDevices();
for (BluetoothDevice bondedDevice : bondedDevices) {
Log.i(TAG, "onClick: " + "配对" + bondedDevice.getName() + ":" + bondedDevice.getAddress());
}
showId_list.addAll(bondedDevices);
showId_adapter.notifyDataSetChanged();
}
});
//附近蓝牙设备展示
nearbyId_adapter = new MyAdapter(this, nearbyId_list);
mynearbyReceiverId.setAdapter(nearbyId_adapter);
mynearbyReceiverId.setLayoutManager(new LinearLayoutManager(this));
mynearbyReceiverId.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
nearbyId_adapter.setMyListener(new MyListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onClick(int position, View view) {
Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
//发起连接请求
nearbyId_list.get(position).createBond();
}
});
//展示已配对设备
showId_adapter = new MyAdapter(this, showId_list);
myshowReceiverId.setAdapter(showId_adapter);
myshowReceiverId.setLayoutManager(new LinearLayoutManager(this));
myshowReceiverId.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
showId_adapter.setMyListener(new MyListener() {
@Override
public void onClick(int position, View view) {
Toast.makeText(MainActivity.this, "准备建立发送数据", Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(BluetoothDevice.ACTION_FOUND)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.i(TAG, "onReceive: " + device.getName() + ":" + device.getAddress());
nearbyId_list.add(device);
nearbyId_adapter.notifyDataSetChanged();
}
}
}
}
本文地址:https://blog.csdn.net/Sun_Sees_You/article/details/107475536
上一篇: Netty学习笔记 3.8 选择器
下一篇: java行为参数化,不要啰嗦代码