国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

藍(lán)牙App設(shè)計(jì)2:使用Android Studio制作一個(gè)藍(lán)牙軟件(包含:代碼實(shí)現(xiàn)等)

這篇具有很好參考價(jià)值的文章主要介紹了藍(lán)牙App設(shè)計(jì)2:使用Android Studio制作一個(gè)藍(lán)牙軟件(包含:代碼實(shí)現(xiàn)等)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:藍(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”,如圖所示:
藍(lán)牙App設(shè)計(jì)2:使用Android Studio制作一個(gè)藍(lán)牙軟件(包含:代碼實(shí)現(xiàn)等)

一、在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();
        }
    }
}

五、效果圖
藍(lán)牙App設(shè)計(jì)2:使用Android Studio制作一個(gè)藍(lán)牙軟件(包含:代碼實(shí)現(xiàn)等)

六、完整項(xiàng)目分享
項(xiàng)目鏈接:https://pan.baidu.com/s/1z8tW3aA7a5knKxiwlE3BFw 提取碼:3d53

七、藍(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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android Studio制作手機(jī)App:通過手機(jī)藍(lán)牙(Bluetooth)與STM32上的低功耗藍(lán)牙(HC-42)連接通信,實(shí)現(xiàn)手機(jī)端對(duì)單片機(jī)的控制。

    Android Studio制作手機(jī)App:通過手機(jī)藍(lán)牙(Bluetooth)與STM32上的低功耗藍(lán)牙(HC-42)連接通信,實(shí)現(xiàn)手機(jī)端對(duì)單片機(jī)的控制。

    背景: 本文的內(nèi)容是針對(duì)單片機(jī)藍(lán)牙模塊(HC-42)開發(fā)的手機(jī)App。在這之前,我想先聲明一點(diǎn),手機(jī)與手機(jī)間的藍(lán)牙連接方式”與“手機(jī)與HC間的藍(lán)牙連接方式”是不一樣的。原因就是手機(jī)搭配的是“經(jīng)典藍(lán)牙”模塊,HC等藍(lán)牙屬于“低功耗藍(lán)牙”模塊。(二者的區(qū)別想了解的

    2024年02月04日
    瀏覽(28)
  • 使用Android studio完成簡(jiǎn)易智能家居APP的制作(含源碼工程包)

    使用Android studio完成簡(jiǎn)易智能家居APP的制作(含源碼工程包)

    ?(填下坑,把我之前答應(yīng)大家的完整軟件代碼翻出來,供大家一起學(xué)習(xí)) 可以看看實(shí)現(xiàn)效果先: ? 智能家居APP展示視頻(含源碼)_嗶哩嗶哩_bilibili 目錄 項(xiàng)目說明 功能介紹 系統(tǒng)功能需求 具體實(shí)現(xiàn)的軟件功能 ?1、地圖定位 2、藍(lán)牙按鈕 3、遠(yuǎn)端控制? 核心代碼展示說明 藍(lán)牙

    2024年02月06日
    瀏覽(26)
  • 使用Android Studio 利用極光推送SDK 制作手機(jī) APP 實(shí)現(xiàn)遠(yuǎn)程測(cè)試技術(shù) (第一部)

    總參考文章:https://blog.csdn.net/qq_38436214/article/details/105073213 Android Studio 安裝配置教程 - Windows(詳細(xì)版) 1.JDK 安裝與環(huán)境變量配置(Win10詳細(xì)版) 《jdk-8u371-windows-i586.exe》 https://blog.csdn.net/qq_38436214/article/details/105071088 此時(shí)會(huì)讓登錄賬號(hào)密碼: https://login.oracle.com/mysso/signon.jsp 賬號(hào):

    2024年02月03日
    瀏覽(24)
  • 基于Android平臺(tái)的記事本軟件(Android Studio項(xiàng)目+報(bào)告+app文件)

    基于Android平臺(tái)的記事本軟件(Android Studio項(xiàng)目+報(bào)告+app文件)

    移動(dòng)應(yīng)用開發(fā)技術(shù) 期末考核報(bào)告 題 ?? 目: ??????? 基于 Android 平臺(tái)的記事本軟件 ???????????? 學(xué)生姓名 ? ???????????????????????? ?? 學(xué)生學(xué)號(hào) ? ???????????????????????? ?? 專 ? ?? 業(yè) ? ???????????????????????? 班 ??? 級(jí)

    2024年02月08日
    瀏覽(31)
  • Android studio 簡(jiǎn)單登錄APP設(shè)計(jì)

    Android studio 簡(jiǎn)單登錄APP設(shè)計(jì)

    一、登錄界面: 二、xml布局設(shè)計(jì):

    2024年01月17日
    瀏覽(16)
  • Android Studio:一個(gè)簡(jiǎn)單的計(jì)算器app的實(shí)現(xiàn)過程<初級(jí)>

    Android Studio:一個(gè)簡(jiǎn)單的計(jì)算器app的實(shí)現(xiàn)過程<初級(jí)>

    ??Android Studio 專欄正在持續(xù)更新中,案例的原理圖解析、各種模塊分析??這里都有哦,同時(shí)也歡迎大家訂閱專欄,獲取更多詳細(xì)信息哦??? ?個(gè)人主頁:零小唬的博客主頁 ??歡迎大家 ??點(diǎn)贊 ??評(píng)論 ??收藏 ?作者簡(jiǎn)介:20級(jí)計(jì)算機(jī)專業(yè)學(xué)生一枚,來自寧夏,可能會(huì)去

    2024年02月01日
    瀏覽(34)
  • Android Studio:一個(gè)簡(jiǎn)單的米英尺單位轉(zhuǎn)化app的實(shí)現(xiàn)過程

    Android Studio:一個(gè)簡(jiǎn)單的米英尺單位轉(zhuǎn)化app的實(shí)現(xiàn)過程

    ??Android Studio 專欄正在持續(xù)更新中,案例的原理圖解析、各種模塊分析??這里都有哦,同時(shí)也歡迎大家訂閱專欄,獲取更多詳細(xì)信息哦??? ?個(gè)人主頁:零小唬的博客主頁 ??歡迎大家 ??點(diǎn)贊 ??評(píng)論 ??收藏 ?作者簡(jiǎn)介:20級(jí)計(jì)算機(jī)專業(yè)學(xué)生一枚,來自寧夏,想從事前

    2023年04月09日
    瀏覽(17)
  • 基于Android Studio的日記App課程設(shè)計(jì)

    基于Android Studio的日記App課程設(shè)計(jì)

    目錄 一、課程設(shè)計(jì)介紹 二、系統(tǒng)模塊介紹及展示 1.系統(tǒng)目錄結(jié)構(gòu)圖 2.數(shù)據(jù)庫設(shè)計(jì) 3.系統(tǒng)模塊測(cè)試 (1)用戶認(rèn)證模塊測(cè)試 (2)日記管理模塊測(cè)試 (3)清單管理模塊測(cè)試 (4)個(gè)人信息模塊測(cè)試 三、代碼展示 ????????在這樣的背景下,開發(fā)一個(gè)基于Android的生活記事本A

    2024年02月03日
    瀏覽(17)
  • 基于Android的學(xué)生信息管理App設(shè)計(jì)(Android studio開發(fā))

    基于Android的學(xué)生信息管理App設(shè)計(jì)(Android studio開發(fā))

    目 錄 一、 題目選擇(題目、選題意義) 3 二、 設(shè)計(jì)目的 3 1、 初衷 3 2、 結(jié)合實(shí)際 3 3、 使用工具 3 三、 最終頁面效果展示 4 1、 登陸界面 4 2、 主界面 5 3、 各個(gè)功能模塊 6 四、 各部分設(shè)計(jì) 11 1、活動(dòng)頁面Activity布局文件 11 2、Activity的編程 13 五、 總結(jié) 17 題目:基于Android的

    2024年02月08日
    瀏覽(24)
  • Android studio課程設(shè)計(jì)開發(fā)實(shí)現(xiàn)---日記APP

    Android studio課程設(shè)計(jì)開發(fā)實(shí)現(xiàn)---日記APP

    你們好,我是oy,介紹一個(gè)簡(jiǎn)易日記APP。 1.啟動(dòng)頁、引導(dǎo)頁及登陸注冊(cè) 2.日記相關(guān)功能 3.個(gè)人中心界面 實(shí)現(xiàn)應(yīng)用啟動(dòng)頁及引導(dǎo)頁 實(shí)現(xiàn)設(shè)置密碼進(jìn)入APP,對(duì)密碼進(jìn)行加密處理 實(shí)現(xiàn)底部導(dǎo)航欄,分為日記列表,新建日記,個(gè)人中心模塊 實(shí)現(xiàn)對(duì)日記刪除、修改、新增的基礎(chǔ)功能

    2024年02月03日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包