1. 程式人生 > >Android 仿QQ微信實時監測網路狀態

Android 仿QQ微信實時監測網路狀態

先簡單說一下思路:網路變化時系統會發出廣播。所以我們監聽這個廣播,利用接

口回撥通知activity做相應的操作就好了。

思路

  • 判斷網路狀態(寫個工具類NetUtil)

  • 寫個類繼承BroadcastReceiver(不要忘記在清單檔案中註冊)

  • 需要在清單檔案中新增許可權

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

  • 回撥介面(NetEvevt)

  • BaseActivity實現這個介面

直接上程式碼

NetUtil

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
 * Author: lenovo
 * Date: 2018/2/26
 * email: 
[email protected]
*/ public class NetUtil { /** * 沒有連線網路 */ public static final int NETWORK_NONE = -1; /** * 行動網路 */ public static final int NETWORK_MOBILE = 0; /** * 無線網路 */ public static final int NETWORK_WIFI = 1; public static int getNetWorkState(Context context) { // 得到連線管理器物件 ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager .getActiveNetworkInfo(); if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) { return NETWORK_WIFI; } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) { return NETWORK_MOBILE; } } else { return NETWORK_NONE; } return NETWORK_NONE; } }

NetBroadReceiver

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;

/**
 * Author: lenovo
 * Date: 2018/2/26
 * email: [email protected]
 */

public class NetBroadcastReceiver extends BroadcastReceiver {
    public NetEvevt evevt = BaseActivity.evevt;

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        // 如果相等的話就說明網路狀態發生了變化
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            int netWorkState = NetUtil.getNetWorkState(context);
            // 介面回撥傳過去狀態的型別
            evevt.onNetChange(netWorkState);
        }
    }

    // 自定義介面
    public interface NetEvevt {
        public void onNetChange(int netMobile);
    }
}

BaseActivity

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

/**
 * Author: lenovo
 * Date: 2018/2/26
 * email: [email protected]
 */

abstract public class BaseActivity extends FragmentActivity implements NetBroadcastReceiver.NetEvevt {

    public static NetBroadcastReceiver.NetEvevt evevt;
    /**
     * 網路型別
     */
    private int netMobile;

    @Override
    protected void onCreate(Bundle arg0) {
        // TODO Auto-generated method stub
        super.onCreate(arg0);
        evevt = this;
        inspectNet();
    }


    /**
     * 初始化時判斷有沒有網路
     */

    public boolean inspectNet() {
        this.netMobile = NetUtil.getNetWorkState(BaseActivity.this);
        return isNetConnect();

        // if (netMobile == 1) {
        // System.out.println("inspectNet:連線wifi");
        // } else if (netMobile == 0) {
        // System.out.println("inspectNet:連線移動資料");
        // } else if (netMobile == -1) {
        // System.out.println("inspectNet:當前沒有網路");
        //
        // }
    }

    /**
     * 網路變化之後的型別
     */
    @Override
    public void onNetChange(int netMobile) {
        // TODO Auto-generated method stub
        this.netMobile = netMobile;
        isNetConnect();

    }

    /**
     * 判斷有無網路 。
     *
     * @return true 有網, false 沒有網路.
     */
    public boolean isNetConnect() {
        if (netMobile == 1) {
            return true;
        } else if (netMobile == 0) {
            return true;
        } else if (netMobile == -1) {
            return false;

        }
        return false;
    }

}

MainActivity

import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends BaseActivity {

    private TextView textView,txtView;
    ListView listView;  //宣告一個ListView物件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView= (TextView) findViewById(R.id.textView);
        txtView=(TextView)this.findViewById(R.id.txtView);


        //啟動時判斷網路狀態
        boolean netConnect = this.isNetConnect();
        if (netConnect){
            textView.setVisibility(View.GONE);
            txtView.setText("網路連線正常");
        }else {
            textView.setVisibility(View.VISIBLE);
            txtView.setText("網路連線異常");
        }
    }

    @Override
    public void onNetChange(int netMobile) {
        super.onNetChange(netMobile);
        //網路狀態變化時的操作
        if (netMobile==NetUtil.NETWORK_NONE){
            textView.setVisibility(View.VISIBLE);
            txtView.setText("網路連線異常");
        }else {
            textView.setVisibility(View.GONE);
            txtView.setText("網路連線正常");
        }
    }

}

記得在清單檔案中註冊

<receiver android:name="cn.broadcastreceiver.NetBroadcastReceiver" >  
            <intent-filter>  
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />  
            </intent-filter>  
        </receiver>  

/**
 * Author: lenovo
 * Date: 2018/2/26
 * email: [email protected]
 */

相關推薦

Android 仿QQ實時監測網路狀態

先簡單說一下思路:網路變化時系統會發出廣播。所以我們監聽這個廣播,利用接口回撥通知activity做相應的操作就好了。思路判斷網路狀態(寫個工具類NetUtil)寫個類繼承BroadcastReceiv

Android仿ios左劃條目刪除、置頂的實現,程式碼簡潔,更容易理解使用

<span style="font-family:Arial, Helvetica, sans-serif;"><span style="background-color: rgb(255, 255, 255);">歡迎大家</span></span

仿QQ向左滑動點選刪除條目的經典案例

本篇文章主要介紹如何側滑刪除條目的案例: 首先我們需要做一個自定義的recyclerView 1,用到的東西有,onTouch事件,觸屏事件跟蹤VelocityTracker,滑動view.scrollTo和scrollBy,Scroller的使用。

Android仿最新自定義相機(長按拍攝,輕點拍照)

最近在開發即時通訊這個模組的時候使用到了自定義的相機,需求與微信一樣,要求相機能長按和輕點,當時在網上找自定義相機的資源,很少,所以,我在這裡把我的一些開發經驗貼出來,供大家學習。 大致完成的功能如下: 長按拍攝視訊,輕點拍照 前後攝像頭的切換 閃光的

Android 仿」自定義數字鍵盤

最終效果: 實現這個自定義鍵盤的思路很簡單: 1. 要寫出一個數字鍵盤的佈局; 2. 與 Edittext 結合使用,對每個按鍵的點選事件進行處理; 3. 禁用系統軟鍵盤。 有了思路,實現起來就不難了。 1. 實現鍵盤的 xml 佈局 網格

Android 模仿QQ,聊天介面長按提示框

效果圖,有點糙 最近要在專案中實現一個長按提示 “複製” 的功能,本來想偷懶在網上找個開源的專案用,但是看了好幾個都不是很滿意,所以就打算按照自己的思路來實現一個。 如何使用 翠花,上程式碼 PromptViewHelper pvHelper = new Pro

安卓開發筆記(三十三):Android仿發現

朋友圈 博文 ext xmlns focus 微信 center img 程序員 首先我們來看看仿寫之後的效果: 看到是這個界面我們首先應該思考這些按鈕是怎麽做出來的?有了一個整體的思路之後才知道該怎麽辦。最開始我想的就直接利用button控件上面直接加上png的圖片

iOS開發實時監測網路狀態Reachability

1.首先在AppDelegate.h新增標頭檔案"Reachability.h",匯入框架SystemConfiguration.framework。Reachability自己網上找。 2. 在AppDelegate.m中這樣實現: - (BOOL)applicatio

android 仿QQ群組裡的@功能,支援@多人,並能一鍵刪除,能獲取上傳對應的id(修改版)

首先註明該文章是借籤別人的部落格,原文博文地址點選開啟連結 android 仿QQ,微信群組裡的@功能,支援@多人,並能一鍵刪除,能獲取上傳對應的id 這個需求來源:本人做整合環信聊天時,專案需要@功能,但是環信並沒有提供@功能。環信@功能地址點選開啟連結 輸入@符號之後進入

仿實時聊天簡單資料庫設計

  廢話不多說博主先上圖效果   此次實時聊天功能參考了資料,以及請教了師父給出設計,只設計了四張表,分別是,組表,組成員表,聊天記錄表,好友移除表。        這裡我先說下我的設計思路組表的意思和QQ 群一樣

vue3.0 仿實時通訊Tab切換與子路由

需求:底部有tab切換;點選當前會顯示對應的子頁面 效果圖 tab子元件: <template> <div class="tabbar"> <router-link class="tab-item" v-for

Android調用登陸、分享、支付

cep from thum 請求 mil 問題 start 返回 ear 前言:用了微信sdk各種痛苦,感覺比qq sdk調用麻煩多了,回調過於麻煩,還必須要在指定包名下的actvity進行回調,所以我在這裏寫一篇博客,有這個需求的朋友可以借鑒一下,以後自己別的項目有用到也

Android封裝類似的頂部TitleBar彈出的PopupWindow代碼

彈出 調用 pro con and switch nload csdn 實例化 Android仿微信頂部titlebar,點擊加號彈出的PopupWindow,是封裝好的PopupWindow,直接拿來用即可,先看效果圖: 調用代碼非常簡單,這是MainActivity的

ios開發之--仿)自定義表情鍵盤

lai signed avi 創建 不能 url div load mps 先附上demo:https://github.com/hgl753951/CusEmoji.git 效果圖如下: 先說下具體的實現功能: 1,本地加載了一些H5的代碼,直接使用webview的lo

JavaScript 獲取並且判斷瀏覽器內核訪問類型(QQ/)

cas fun AS 瀏覽器內核 我們 開發者 ger pre ret 1、作用?   對於開發者而言,微信或者QQ自帶的瀏覽器內核或許不能夠為用戶帶來良好的體驗,所有有的時候我們需要引導用戶進入自帶瀏覽器體驗,所以這個功能主要是解決這個問題。 2、實現方法?   使

android app使用登錄接口回調沒有被執行的問題研究

The 應用平臺 cat 分享 github theme 調用 runnable handler 本人開發的一個app使用了sharesdk集成微信登錄功能,在測試的過程中微信授權登錄界面有調用,但是授權後原應用的回調沒有被執行 應用的包名是com.kimi.searche

Android app 第三方支付接入詳解

微信支付做了好幾遍了,都沒有出現什麼棘手的問題,下面一一為大家分享一下,歡迎吐槽。 還是老樣子,接入微信的支付要第一步新增微信支付官方的包libammsdk.jar 首先就處理略坑的一個問題,app應用簽名和包名的問題。 商戶在微信開放平臺申請開發應用後,微信開放平臺會生成APP的唯一標識AP

CAS統一登入認證(17): QQ,,人臉識別等第三方登入的另類實現

CAS本身支援許多第三方賬號登入認證,如facebook,github,google賬號等,簡單配置即可實現,網上也有一些通過改程式碼或增加代理網站實現QQ,微信登入的,但所有這些登入認證,最後使用者賬號並不是自己資料庫儲存的賬號,而是第三方的openid或者暱稱等,不是我們所需要的,轉換為對應的資

HTML5仿手機聊天介面

HTML5仿手機微信聊天介面,截圖效果如下: 原始碼如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>HTML5模擬微信聊天介面&l

【轉】Android動態破解本地資料庫(EnMicroMsg.db)

最近在公司接了一個任務,需要在幾百臺手機上安裝一個app,目的是獲取微信裡面的通訊錄,並且定時的把他傳送到我們的伺服器上。當時依次嘗試的如下幾個方案:   1.通過群控,將好友截圖傳送到服務端(python),利用python的影象識別庫來獲取好友的資訊。   2.開發一個app,使用