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

Android 獲取網(wǎng)絡連接狀態(tài)新方法

這篇具有很好參考價值的文章主要介紹了Android 獲取網(wǎng)絡連接狀態(tài)新方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一. 問題背景

????????Android12上,有的app模塊判斷當前網(wǎng)絡的類型和連接狀態(tài)時,還是使用的舊的API,導致返回的結果不準確,影響代碼邏輯判斷,本篇文章就這一問題,整理一下判斷網(wǎng)絡類型和連接狀態(tài)的新方法。

二. 原因分析

????????在Android 10以前的版本,大家都是通過NetworkInfo.java 的getType()方法獲取網(wǎng)絡類型,通過isConnected()方法來判斷是否連接上, 判斷網(wǎng)絡連接的舊方法如下:

1.是否連接:

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

?2.?網(wǎng)絡類型

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

?但是在Android10之后,這些方法已過時,官方不推薦使用,我們先來看下官方的源碼說明

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

?左邊是Android10,右邊是Android9的源碼 ,? ?在10上已經(jīng)標記Deprecated,新加的注釋也推薦了使用的API。

還有一個舊廣播String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"? Android 9之后也廢棄,不推薦使用,之前的使用方法:

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

看下官方說明:

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

?官方標記Deprecated,是避免在高版本的設備上獲取返回的網(wǎng)絡狀態(tài)不對,并且給了推薦的API,以Android10為一個分界點, 之后的版本都推薦使用新的API方法。

三.?官方推薦API

官方推薦:監(jiān)控 Android 中的互聯(lián)網(wǎng)連接,可以使用ConnectivityManager類,這是一個允許您查詢網(wǎng)絡狀態(tài)的系統(tǒng)服務類,? ?還有一個NetworkCapabilities類,代表活動網(wǎng)絡的功能。

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

體使用方法如下:

registerNetworkCallback():此函數(shù)注冊一個NetworkCallback對象來監(jiān)聽網(wǎng)絡狀態(tài)變化。它以一個NetworkCallback對象作為參數(shù)。

unregisterNetworkCallback():此函數(shù)取消注冊以前注冊的NetworkCallback對象。

接下來重點關注NetworkCallback中的回調方法描述

回調方法

描述

onCapabilitiesChanged

當網(wǎng)絡狀態(tài)改變時回調,比如信號強度切換,或者連接上網(wǎng)絡—>斷開網(wǎng)絡,或者 mobile網(wǎng)絡切換到Wifi網(wǎng)絡,都會回調

onAvailable

網(wǎng)絡連接成功 但不能判斷該網(wǎng)絡是否可以正常上網(wǎng)

onUnavailable

當網(wǎng)絡連接超時或網(wǎng)絡請求達不到可用要求時調用

onBlockedStatusChanged

當訪問指定的網(wǎng)絡被阻止或解除阻塞時調用

onLosing

當網(wǎng)絡正在斷開連接時調用

onLost

當網(wǎng)絡已斷開連接時調用

onLinkPropertiesChanged

當網(wǎng)絡連接的屬性被修改時調用

接下來再說一下

NetworkCapabilities.java類中的NET_CAPABILITY_VALIDATED字段,描述為:

表示此網(wǎng)絡上的連接已成功驗證。例如,對于具有NET_CAPABILITY_INTERNET的網(wǎng)絡,這意味著已成功檢測到INTERNET連接。

通過實際log來描述說明一下:

1. 連接上可上網(wǎng)的wifi,可看到VALIDATED的標記:

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

2.?連接上需要認證和不能上網(wǎng)的wifi,找不到VALIDATED標記:

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

?3.?用數(shù)據(jù)流量上網(wǎng),可以看到VALIDATED的標記:

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

我們可以通過networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)這個方法作為(連接可以正常上網(wǎng)的網(wǎng)絡)判斷條件。進一步通過networkCapabilities.hasTransport方法來判斷當前的網(wǎng)絡類型。

android 獲取網(wǎng)絡狀態(tài),Android App,Android獲取網(wǎng)絡狀態(tài),Android獲取連接網(wǎng)絡類型

四. 使用方法

看代碼更直接一點:

MainActivity.java

@SuppressLint("NewApi")
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "ConnectManager";

    private ConnectivityManager networkService;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        networkService = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (networkService != null) {
            //注冊 NetworkCallBack
            networkService.registerDefaultNetworkCallback(networkCallBack);
        }
    }


    /*
    * 測試網(wǎng)絡工具類方法
    * */
    @Override
    protected void onResume() {
        super.onResume();
        //Log.e(TAG,  "=====在onResume方法中判斷 : isMobileNetwork :" + NetworkUtils.isMobileNetwork(this));
        //Log.e(TAG,  "=====在onResume方法中判斷 : isWifiNetwork :" + NetworkUtils.isWifiNetwork(this));
        //Log.e(TAG,  "=====在onResume方法中判斷 : getConnectedNetworkType :" + NetworkUtils.getConnectedNetworkType(this));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (networkService != null && networkCallBack != null) {
            networkService.unregisterNetworkCallback(networkCallBack);
        }
    }

    private final ConnectivityManager.NetworkCallback networkCallBack = new ConnectivityManager.NetworkCallback(){
        //當網(wǎng)絡狀態(tài)修改但仍舊是可用狀態(tài)時調用
        @Override
        public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
            super.onCapabilitiesChanged(network, networkCapabilities);
            if (NetworkUtils.isConnectedAvailableNetwork(getBaseContext())) {
                Log.d(TAG, "onCapabilitiesChanged ---> ====網(wǎng)絡可正常上網(wǎng)===網(wǎng)絡類型為: "+ NetworkUtils.getConnectedNetworkType(MainActivity.this));
            }

            //表明此網(wǎng)絡連接驗證成功
            if(networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
                if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    Log.d(TAG, "===當前在使用Mobile流量上網(wǎng)===");
                } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    Log.d(TAG, "====當前在使用WiFi上網(wǎng)===");
                } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)) {
                    Log.d(TAG, "=====當前使用藍牙上網(wǎng)=====");
                } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
                    Log.d(TAG, "=====當前使用以太網(wǎng)上網(wǎng)=====");
                } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
                    Log.d(TAG, "===當前使用VPN上網(wǎng)====");
                } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE)) {
                    Log.d(TAG, "===表示此網(wǎng)絡使用Wi-Fi感知傳輸====");
                } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN)) {
                    Log.d(TAG, "=====表示此網(wǎng)絡使用LoWPAN傳輸=====");
                } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_USB)) {
                    Log.d(TAG, "=====表示此網(wǎng)絡使用USB傳輸=====");
                }
            }


        }

        @Override
        public void onAvailable(@NonNull Network network) {
            super.onAvailable(network);
            Log.e(TAG, "==網(wǎng)絡連接成功,通知可以使用的時候調用====onAvailable===");
        }

        @Override
        public void onUnavailable() {
            Log.e(TAG, "==當網(wǎng)絡連接超時或網(wǎng)絡請求達不到可用要求時調用====onUnavailable===");
            super.onUnavailable();
        }

        @Override
        public void onBlockedStatusChanged(@NonNull Network network, boolean blocked) {
            Log.e(TAG, "==當訪問指定的網(wǎng)絡被阻止或解除阻塞時調用===onBlockedStatusChanged==");
            super.onBlockedStatusChanged(network, blocked);
        }

        @Override
        public void onLosing(@NonNull Network network, int maxMsToLive) {
            Log.e(TAG, "==當網(wǎng)絡正在斷開連接時調用===onLosing===");
            super.onLosing(network, maxMsToLive);
        }

        @Override
        public void onLost(@NonNull Network network) {
            Log.e(TAG, "==當網(wǎng)絡已斷開連接時調用===onLost===");
            super.onLost(network);
        }


        @Override
        public void onLinkPropertiesChanged(@NonNull Network network, @NonNull LinkProperties linkProperties) {
            Log.e(TAG, "==當網(wǎng)絡連接的屬性被修改時調用===onLinkPropertiesChanged===");
            super.onLinkPropertiesChanged(network, linkProperties);
        }
    };

}

網(wǎng)絡工具類NetworkUtils.java

@SuppressLint("NewApi")
public class NetworkUtils {

    private static final String TAG = "ConnectManager";

    /**
     * Indicates this network uses a Cellular transport.
     */
    public static final int TRANSPORT_CELLULAR = 0;

    /**
     * Indicates this network uses a Wi-Fi transport.
     */
    public static final int TRANSPORT_WIFI = 1;

    /**
     * Indicates this network uses a Bluetooth transport.
     */
    public static final int TRANSPORT_BLUETOOTH = 2;

    /**
     * Indicates this network uses an Ethernet transport.
     */
    public static final int TRANSPORT_ETHERNET = 3;

    /**
     * Indicates this network uses a VPN transport.
     */
    public static final int TRANSPORT_VPN = 4;

    /**
     * Indicates this network uses a Wi-Fi Aware transport.
     */
    public static final int TRANSPORT_WIFI_AWARE = 5;

    /**
     * Indicates this network uses a LoWPAN transport.
     */
    public static final int TRANSPORT_LOWPAN = 6;

    /**
     * Indicates this network uses a Test-only virtual interface as a transport.
     * @hide
     */
    public static final int TRANSPORT_TEST = 7;

    /**
     * Indicates this network uses a USB transport.
     */
    public static final int TRANSPORT_USB = 8;



    /**
     * >= Android 10(Q版本)推薦
     *
     * 當前使用MOBILE流量上網(wǎng)
     */
    public static boolean isMobileNetwork(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        Network network = cm.getActiveNetwork();
        if (null == network) {
            return false;
        }

        NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);
        if (null == capabilities) {
            return false;
        }
        return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
                && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
    }


    /**
     * >= Android 10(Q版本)推薦
     *
     * 當前使用WIFI上網(wǎng)
     */

    public static boolean isWifiNetwork(Context context) {
        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        Network network = cm.getActiveNetwork();
        if (null == network) {
            return false;
        }
        NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);
        if (null == capabilities) {
            return false;
        }
        return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
    }


    /**
     *  >= Android 10(Q版本)推薦
     *
     * 當前使用以太網(wǎng)上網(wǎng)
     */
    public static boolean isEthernetNetwork(Context context) {
        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        Network network = cm.getActiveNetwork();
        if (null == network) {
            return false;
        }
        NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);
        if (null == capabilities) {
            return false;
        }
        return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)
                && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
    }



    /**
     * >= Android 10(Q版本)推薦
     *
     * NetworkCapabilities.NET_CAPABILITY_INTERNET,表示此網(wǎng)絡應該(maybe)能夠訪問internet
     *
     *  判斷當前網(wǎng)絡可以正常上網(wǎng)
     *  表示此連接此網(wǎng)絡并且能成功上網(wǎng)。  例如,對于具有NET_CAPABILITY_INTERNET的網(wǎng)絡,這意味著已成功檢測到INTERNET連接。
     */
    public static boolean isConnectedAvailableNetwork(Context context) {
        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        Network network = cm.getActiveNetwork();
        if (null == network) {
            return false;
        }
        NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);
        if (null == capabilities) {
            return false;
        }
        return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
    }


    /**
     * >= Android 10(Q版本)推薦
     *
     * 獲取成功上網(wǎng)的網(wǎng)絡類型
     * value = {
     *    TRANSPORT_CELLULAR,   0 表示此網(wǎng)絡使用蜂窩傳輸。
     *    TRANSPORT_WIFI,       1 表示此網(wǎng)絡使用Wi-Fi傳輸。
     *    TRANSPORT_BLUETOOTH,  2 表示此網(wǎng)絡使用藍牙傳輸。
     *    TRANSPORT_ETHERNET,   3 表示此網(wǎng)絡使用以太網(wǎng)傳輸。
     *    TRANSPORT_VPN,        4 表示此網(wǎng)絡使用VPN傳輸。
     *    TRANSPORT_WIFI_AWARE, 5 表示此網(wǎng)絡使用Wi-Fi感知傳輸。
     *    TRANSPORT_LOWPAN,     6 表示此網(wǎng)絡使用LoWPAN傳輸。
     *    TRANSPORT_TEST,       7 指示此網(wǎng)絡使用僅限測試的虛擬接口作為傳輸。
     *    TRANSPORT_USB,        8 表示此網(wǎng)絡使用USB傳輸
     * }
     */
    public static int getConnectedNetworkType(Context context) {
        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        Network network = cm.getActiveNetwork();
        if (null == network) {
            return -1;
        }
        NetworkCapabilities capabilities = cm.getNetworkCapabilities(network);
        if (null == capabilities) {
            return -1;
        }
        if (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
            if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                return NetworkCapabilities.TRANSPORT_CELLULAR;
            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                return NetworkCapabilities.TRANSPORT_WIFI;
            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)) {
                return NetworkCapabilities.TRANSPORT_BLUETOOTH;
            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
                return NetworkCapabilities.TRANSPORT_ETHERNET;
            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
                return NetworkCapabilities.TRANSPORT_VPN;
            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE)) {
                return NetworkCapabilities.TRANSPORT_WIFI_AWARE;
            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN)) {
                return NetworkCapabilities.TRANSPORT_LOWPAN;
            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_USB)) {
                return NetworkCapabilities.TRANSPORT_USB;
            }
        }
        return -1;
    }
}

Android10之后,請使用新的API方法, 工具類可以根據(jù)業(yè)務需求去擴展, 供參考。文章來源地址http://www.zghlxwxcb.cn/news/detail-712761.html

到了這里,關于Android 獲取網(wǎng)絡連接狀態(tài)新方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Android完美獲取狀態(tài)欄高度、標題欄高度、編輯區(qū)域高度的獲取

    獲取狀態(tài)欄高度——方法3 應用區(qū)的頂端位置即狀態(tài)欄的高度 注意 該方法不能在初始化的時候用 */ Rect rectangle= new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle); //高度為rectangle.top-0仍為rectangle.top Log.e(“WangJ”, “狀態(tài)欄-方法3:” + rectangle.top); 看結果: *注意* 如果

    2024年02月02日
    瀏覽(56)
  • Android應用開發(fā)(23)獲取亮滅屏狀態(tài)

    Android應用開發(fā)(23)獲取亮滅屏狀態(tài)

    Android應用開發(fā)學習筆記——目錄索引 在android 應用程序獲取亮滅屏狀態(tài)的常用方法有: 使用PowerManager提供的API函數(shù) 注冊Broadcast監(jiān)聽 frameworks/base/core/java/android/os/PowerManager.java 使用PowerManager的API函數(shù)isInteractive()在應用程序中使用非常簡單:在需要獲取的地方調用一下即可。 百

    2024年02月15日
    瀏覽(22)
  • Android的WIFI和以太網(wǎng)連接狀態(tài)

    在一些 Android 設備上同時具有以太網(wǎng)和Wifi網(wǎng)絡連接 我們可以使用 ConnectivityManager 類來判斷設備的網(wǎng)絡狀態(tài)。以下是一個 Kotlin 示例,說明了如何檢查網(wǎng)絡連接狀態(tài)以及連接類型(例如 Wi-Fi 或移動數(shù)據(jù)):

    2024年02月16日
    瀏覽(18)
  • Android 獲取app(apk)簽名

    Android 獲取app(apk)簽名

    以上方法參考微信開放平臺的-獲取安裝到手機的第三方應用簽名的apk包? 源碼 ?

    2024年02月16日
    瀏覽(48)
  • Android TelephonyManager雙卡獲取數(shù)據(jù)開啟狀態(tài)異常的可能原因

    Android TelephonyManager雙卡獲取數(shù)據(jù)開啟狀態(tài)異常的可能原因

    背景 應用內(nèi)不指定subId獲取數(shù)據(jù)狀態(tài)可能會錯誤,因為可能拿到voice的能力,而非data。 代碼邏輯 1、通過TelephonyManager的isDataEnabled()沒有指定subId時,調用內(nèi)部方法isDataEnabledForReason,傳入getId()參數(shù)以指定subid,然后會執(zhí)行到SubscriptionManager的getDefaultDataSubscriptionId()以獲取默認值

    2024年02月15日
    瀏覽(20)
  • Android 網(wǎng)絡狀態(tài)判斷

    1、獲取網(wǎng)絡信息,首先需要獲取權限 2.1我們通過ConnectivityManager可以獲取狀態(tài),但是我們需要考慮到Android版本不同獲取方式不同。 2.1.1hasCapability可以判斷網(wǎng)絡是否連接,常用參數(shù)如下: ?NetworkCapabilities.NET_CAPABILITY_INTERNET:判斷是否連上網(wǎng) NetworkCapabilities.NET_CAPABILITY_VALIDATED: 判

    2024年03月13日
    瀏覽(18)
  • Android 監(jiān)聽網(wǎng)絡狀態(tài)變化

    Android 監(jiān)聽網(wǎng)絡狀態(tài)變化

    此篇存在的主要意義在于解決用戶使用app中網(wǎng)絡狀態(tài)發(fā)生了變化,需要我們?nèi)討B(tài)監(jiān)聽網(wǎng)絡連接狀態(tài)(有網(wǎng)、無網(wǎng))、網(wǎng)絡類型 (包括wifi、移動網(wǎng)絡 - 3G、4G等等) 門前授課 關于網(wǎng)絡狀態(tài)的監(jiān)聽,主要是基于 Android 廣播 - BroadcaseReceiver組件 ~ 同時關于廣播的注冊方面,從An

    2024年02月10日
    瀏覽(21)
  • Android獲取App冷啟動、熱啟動時間

    啟動模擬器或者連接手機,通過adb命令的方式獲取App冷啟動、熱啟動時間。 啟動App的adb命令: -W:啟動完成之后,返回啟動耗時。 比如,我的packagename是com.example.myapplication,我的MainActivity的配置如下: 則adb啟動命令為 一、冷啟動時間(如果應用啟動過,則從最近任務殺進程

    2024年02月05日
    瀏覽(21)
  • uni-app 獲取android相冊

    在uni-app中提供的封裝好的api中沒有提供獲取手機相冊的能力,只能打開相冊后由用戶選擇其中的照片,而插件庫中提供的獲取相冊的插件都是收費的,這里為大家分享一個可以自己獲取android相冊的代碼段:

    2024年02月11日
    瀏覽(23)
  • Android+MQTT(Android APP 連接至MQTT服務器)

    Android+MQTT(Android APP 連接至MQTT服務器)

    這段時間因為畢設的需求,接觸學習了一下用Android app連接MQTT服務器,然后對下位機(STM32/ESP8266)進行數(shù)據(jù)通訊的一個小設計,本篇文章介紹app+MQTT服務器這一段。 實現(xiàn)原理: 這里設計的是一個監(jiān)測控制智能風扇的APP,可以實時監(jiān)測當前溫度、濕度及下位機的傳感器、控制

    2024年02月02日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包