前言:藍(lán)牙聊天App設(shè)計(jì)全部有三篇文章(一、UI界面設(shè)計(jì),二、藍(lán)牙搜索配對(duì)連接實(shí)現(xiàn),三、藍(lán)牙連接聊天),這篇文章是:二、藍(lán)牙搜索配對(duì)連接實(shí)現(xiàn)。
課程1:Android Studio小白安裝教程,以及第一個(gè)Android項(xiàng)目案例“Hello World”的調(diào)試運(yùn)行
課程2:藍(lán)牙聊天App設(shè)計(jì)1:Android Studio制作藍(lán)牙聊天通訊軟件(UI界面設(shè)計(jì))
課程3:藍(lán)牙聊天App設(shè)計(jì)2:Android Studio制作藍(lán)牙聊天通訊軟件(藍(lán)牙搜索)
課程4:藍(lán)牙聊天App設(shè)計(jì)3:Android Studio制作藍(lán)牙聊天通訊軟件(完結(jié),藍(lán)牙連接聊天,結(jié)合生活情景進(jìn)行藍(lán)牙通信的通俗講解,以及代碼功能實(shí)現(xiàn),內(nèi)容詳細(xì),講解通俗易懂)
涉及文件:
在java目錄下新建一個(gè)包“BluetoothPackage”,并在該包內(nèi)新建兩個(gè)新文件:“Constant.java”和“BluetoothController.java”,如圖所示:
一、在AndroidManifest.xml中添加依賴:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
二、新建文件Constant.java,用來預(yù)先定義一些下面可能需要用到的常量,完整代碼如下:
package com.example.wyb.btw3.connect;
/**
* Created by WYB on 2023/4/24.
*/
public class Constant {
public static final String CONNECTTION_UUID = "00001101-0000-1000-8000-00805F9B34FB";
/**
* 開始監(jiān)聽
*/
public static final int MSG_START_LISTENING = 1;
/**
* 結(jié)束監(jiān)聽
*/
public static final int MSG_FINISH_LISTENING = 2;
/**
* 有客戶端連接
*/
public static final int MSG_GOT_A_CLINET = 3;
/**
* 連接到服務(wù)器
*/
public static final int MSG_CONNECTED_TO_SERVER = 4;
/**
* 獲取到數(shù)據(jù)
*/
public static final int MSG_GOT_DATA = 5;
/**
* 出錯(cuò)
*/
public static final int MSG_ERROR = -1;
}
三、新建文件BlueToothController .java,完整代碼如下:
package com.example.wyb.btw3;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import java.util.ArrayList;
import java.util.List;
/**
* Created by WYB on 2023/4/24.
*/
public class BlueToothController {
private BluetoothAdapter mAdapter;
public BlueToothController(){
mAdapter = BluetoothAdapter.getDefaultAdapter();
}
/*
打開藍(lán)牙設(shè)備
*/
public void turnOnBlueTooth(Activity activity, int requestCode){
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
activity.startActivityForResult(intent,requestCode);
}
/*
查找未綁定的藍(lán)牙設(shè)備
*/
public void findDevice(){
assert (mAdapter!=null);
mAdapter.startDiscovery();
}
/*
查看已綁定的藍(lán)牙設(shè)備
*/
public List<BluetoothDevice> getBondedDeviceList(){
return new ArrayList<>(mAdapter.getBondedDevices());
}
}
四、MainActivity .java完整代碼如下:
package com.example.wyb.bluetoothchatui;
import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import BluetoothPackage.BluetoothController;
import MyClass.DeviceAdapter;
import MyClass.DeviceClass;
public class MainActivity extends AppCompatActivity {
private DeviceAdapter mAdapter1,mAdapter2;
private List<DeviceClass> mbondDeviceList = new ArrayList<>();//搜索到的所有已綁定設(shè)備保存為列表
private List<DeviceClass> mfindDeviceList = new ArrayList<>();//搜索到的所有未綁定設(shè)備保存為列表
private BluetoothController mbluetoothController = new BluetoothController();
private Toast mToast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Init_Bluetooth();//開啟藍(lán)牙相關(guān)權(quán)限
init_Filter();//初始化廣播并打開
Init_listView();//初始化設(shè)備列表
show_bondDeviceList();//搜索展示已經(jīng)綁定的藍(lán)牙設(shè)備
}
//初始化藍(lán)牙權(quán)限
private void Init_Bluetooth(){
//開啟藍(lán)牙位置共享
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
}
mbluetoothController.enableVisibily(this);//讓其他藍(lán)牙看得到我
mbluetoothController.turnOnBlueTooth(this,0);//打開藍(lán)牙
}
//初始化列表,適配器的加載
public void Init_listView(){
mAdapter1 = new DeviceAdapter(MainActivity.this, R.layout.device_item, mbondDeviceList);
ListView listView1 = (ListView)findViewById(R.id.listview1);
listView1.setAdapter(mAdapter1);
mAdapter1.notifyDataSetChanged();
//listView1.setOnItemClickListener(toMainActivity2);//設(shè)備點(diǎn)擊事件,點(diǎn)擊設(shè)備名稱后執(zhí)行toMainActivity2
mAdapter2 = new DeviceAdapter(MainActivity.this, R.layout.device_item, mfindDeviceList);
ListView listView2 = (ListView)findViewById(R.id.listview2);
listView2.setAdapter(mAdapter2);
mAdapter2.notifyDataSetChanged();
}
//開啟廣播
private void init_Filter(){
IntentFilter filter = new IntentFilter();
//開始查找
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
//結(jié)束查找
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
//查找設(shè)備
filter.addAction(BluetoothDevice.ACTION_FOUND);
//設(shè)備掃描模式改變
filter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
//綁定狀態(tài)
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
registerReceiver(receiver, filter);
}
//廣播內(nèi)容
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)){
setSupportProgressBarIndeterminateVisibility(true);
change_Button_Text("搜索中...","DISABLE");
mfindDeviceList.clear();
mAdapter2.notifyDataSetChanged();
}
else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){
setProgressBarIndeterminateVisibility(false);
change_Button_Text("搜索設(shè)備","ENABLE");
}
//查找設(shè)備
else if(BluetoothDevice.ACTION_FOUND.equals(action)){
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
change_Button_Text("搜索中...","DISABLE");
//查找到一個(gè)設(shè)備就添加到列表類中
mfindDeviceList.add(new DeviceClass(device.getName(),device.getAddress()));
mAdapter2.notifyDataSetChanged();//刷新列表適配器,將內(nèi)容顯示出來
}
else if(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED.equals(action)){
int scanMode = intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE,0);
if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE){
setProgressBarIndeterminateVisibility(true);
}
else {
setProgressBarIndeterminateVisibility(false);
}
}
else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
BluetoothDevice remoteDecive = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(remoteDecive == null){
return;
}
int status = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, 0);
if(status == BluetoothDevice.BOND_BONDED) {
showToast("已綁定" + remoteDecive.getName());
} else if(status == BluetoothDevice.BOND_BONDING) {
showToast("正在綁定" + remoteDecive.getName());
} else if(status == BluetoothDevice.BOND_NONE) {
showToast("未綁定" + remoteDecive.getName());
}
}
}
};
//點(diǎn)擊開始查找藍(lán)牙設(shè)備
public View findDevice(View view){
mbluetoothController.findDevice();
return view;
}
//查找已綁定的藍(lán)牙設(shè)備
private void show_bondDeviceList(){
mbondDeviceList.clear();
List<BluetoothDevice> bondDevices = mbluetoothController.getBondedDeviceList();//查找已綁定設(shè)備
for(int i=0;i<bondDevices.size();i++){
mbondDeviceList.add(new DeviceClass(bondDevices.get(i).getName(),bondDevices.get(i).getAddress()));
}
mAdapter1.notifyDataSetChanged();
}
//點(diǎn)擊按鍵搜索后按鍵的變化
private void change_Button_Text(String text,String state){
Button button = (Button)findViewById(R.id.button1);
if("ENABLE".equals(state)){
button.setEnabled(true);
button.getBackground().setAlpha(255); //0~255 之間任意調(diào)整
button.setTextColor(ContextCompat.getColor(this, R.color.black));
}
else {
button.setEnabled(false);
button.getBackground().setAlpha(150); //0~255 之間任意調(diào)整
button.setTextColor(ContextCompat.getColor(this, R.color.colorAccent));
}
button.setText(text);
}
//點(diǎn)擊設(shè)備后執(zhí)行的函數(shù)
private AdapterView.OnItemClickListener toMainActivity2 =new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
};
//設(shè)置toast的標(biāo)準(zhǔn)格式
private void showToast(String text){
if(mToast == null){
mToast = Toast.makeText(this, text,Toast.LENGTH_SHORT);
mToast.show();
}
else {
mToast.setText(text);
mToast.show();
}
}
}
五、效果圖
六、完整項(xiàng)目分享
項(xiàng)目鏈接:https://pan.baidu.com/s/1z8tW3aA7a5knKxiwlE3BFw 提取碼:3d53文章來源:http://www.zghlxwxcb.cn/news/detail-514170.html
七、藍(lán)牙聊天功能實(shí)現(xiàn)
可以看課程藍(lán)牙聊天App設(shè)計(jì)3:Android Studio制作藍(lán)牙聊天通訊軟件(完結(jié),藍(lán)牙連接聊天,結(jié)合生活情景進(jìn)行藍(lán)牙通信的通俗講解,以及代碼功能實(shí)現(xiàn),內(nèi)容詳細(xì),講解通俗易懂)文章來源地址http://www.zghlxwxcb.cn/news/detail-514170.html
到了這里,關(guān)于藍(lán)牙App設(shè)計(jì)2:使用Android Studio制作一個(gè)藍(lán)牙軟件(包含:代碼實(shí)現(xiàn)等)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!