導航:首頁 > 操作系統 > android監聽網路可用

android監聽網路可用

發布時間:2023-04-17 02:59:23

android網路狀態判斷與處理

在項目的開發過程中 , 我們的應用程序都是在有網路的情況下進行處理的 , 但我們也要考慮到在沒有網路的情況下,應用會出現什麼樣的情況 , 所以我們需要獲取到當前的網路信息.

獲取網路信息需要在AndroidManifest.xml文件中加入相應的許可權。

1)判斷是否有網路連接

2)判斷WIFI網路是否可用

3)判斷MOBILE網路是否可用

4)獲取當前網路連接的類型信息

在開發android應用時,涉及到要進行網路訪問,時常需要進行網路狀態的檢查,以提供給用戶必要的提醒。一般可以通過ConnectivityManager來完成該工作。

當我們要在程序中監聽網路狀態時,只要一悶擾下幾個步驟即可:

1、定義一個Receiver重載其中的onReceive函數,在其中完成所需要的功能,如根據WIFI和GPRS是否斷開來改變空間的外觀

2、在適當的地方注冊Receiver,可以在程序中注冊,在onCreate中調用如下函數即可:

3、在適當時取消注冊Receiver,可以在程序中取螞旦旦消,在onDestroye中調用如下函數即可:

很多朋友在android開發中,都會遇到手機網路類型判斷,因為就目前的android平台手機來說:可能會存在4種狀態:

這四種狀態,如果沒有網路,肯定是無法請求Internet了,如果是wap就需要為手機添加中國移動代理.
下面是網路判斷的遲晌方法:

因為獲取的是服務對象,所以這個網路狀態都是時時刷新的,所以我們只需要得到網路狀態就可以了!

最後總結:
工具類:

BaseActivity:

MainActivity

Log日誌

Ⅱ android中如何用廣播監聽網路變化,將其顯示在通知欄上

網路狀態發生變化的時候,系統會發出 android.net.conn.CONNECTIVITY_CHANGE .
下面是實現的 demo :

package mark.zhang;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.IBinder;
import android.util.Log;

public class ListenNetStateService extends Service {
private ConnectivityManager connectivityManager;
private NetworkInfo info;

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
Log.d("mark", "網路狀態已經改變");
connectivityManager = (ConnectivityManager)

getSystemService(Context.CONNECTIVITY_SERVICE);
info = connectivityManager.getActiveNetworkInfo();
if(info != null && info.isAvailable()) {
String name = info.getTypeName();
Log.d("mark", "當前網路名稱:" + name);
} else {
Log.d("mark", "沒有可用網路");
}
}
}
};

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
super.onCreate();
IntentFilter mFilter = new IntentFilter();
mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mReceiver, mFilter);
}

@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
}

Ⅲ android開發怎麼監聽網路請求

Android中網路情況時有變化,比如從有網到沒網,從wifi到gprs,gprs又從cmwap到cmnet...等等!
如果你的程序有些功能是需要網路支持的,有時候就需要監聽到網路的變化情況進行相應的處理。
比如說下載一個文件,如果突然斷網了,怎麼處理?網路又恢復了,如何監聽到並重連?

當網路變化的時候系統會發出義個廣播broadcast,只要在程序中注冊一個廣播接收器BroadcastReceiver,並在IntentFilter中添加相應的過濾,這樣一旦網路有變化,程序就能監聽到
public static final String CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
private void registerDateTransReceiver() {
Log.i(TAG, "register receiver " + CONNECTIVITY_CHANGE_ACTION);
IntentFilter filter = new IntentFilter();
filter.addAction(CONNECTIVITY_CHANGE_ACTION);
filter.setPriority(1000);
registerReceiver(new MyReceiver(), filter);
}

在MyReceiver中:
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i(TAG, "PfDataTransReceiver receive action " + action);
if(TextUtils.equals(action, CONNECTIVITY_CHANGE_ACTION)){//網路變化的時候會發送通知
Log.i(TAG, "網路變化了");
return;
}
}

當網路變化時,從有網到沒網也會發廣播,就舉的例子來說,如果下載時斷網了,接收到廣播的時候要判斷當前網路是可用還是不可用狀態,如果可用進行什麼操作;不可用進行什麼操作:
public static NetworkInfo getActiveNetwork(Context context){
if (context == null)
return null;
ConnectivityManager mConnMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (mConnMgr == null)
return null;
NetworkInfo aActiveInfo = mConnMgr.getActiveNetworkInfo(); // 獲取活動網路連接信息
return aActiveInfo;
}

這個方法返回的aActiveInfo可以判斷網路的有無,如果返回的是null,這時候是斷網了,如果返回對象不為空,則是連上了網。在返回的NetworkInfo對象里,可以有對象的方法獲取更多的當前網路信息,比如是wifi還是cmwap等,就不多說了。

Ⅳ Android之WIFI-網路可用性校驗(NetworkMonitor)

流程框架

基礎知識

源碼

細節掘稿
1.WifiStateMachine在狀態L2ConnectedState時,進行NetworkAgent初始化。
NetworkAgent初始化的過程建立與攜銀ConnectivityService通信

2.ConnectivityService的registerNetworkAgent創建NetworkAgentInfo

3.NetworkAgentInfo的初辯散宴始化,創建NetworkMonitor,而NetworkMonitor則是監聽網路的可用性

4.NetworkMonitor

adb控制

問題

參考學習

Ⅳ Carson帶你學Android:檢測網路狀態&監聽網路變化

由於在API23及以上時,getNetworkInfo(int networkType)方法已被棄用,取而代之的是:

所以檢測網路狀態時需要分版本進行念納檢測

使用BroadcastReceiver廣播接收器來培哪接收網路狀態(採用系統廣播)

接下來我將用一個實例進行網路狀態的監聽和檢測。

NetWorkStateReceiver.java

注冊分為:動態注冊和靜態注冊

MainActivity.java

在AndroidManifest.xml進行廣播的靜態注冊
AndroidManifest.xml

AndroidManifest.xml

Carson的Github地址配高碼: Check_Net

不定期分享關於 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度

Ⅵ Android 快速實現網路監聽

github: https://github.com/Levine1992/HttpCapture

看不到動圖可以到我的碼雲倉庫看 點擊跳轉碼雲

1. 項目根目錄的build.gradle中添加

2. app目錄中build.gradle中添加

3. application中進行初始化

4. okhttp添加攔截器

這樣,打開你的app的時候就可以像上面的動畫一樣有一個黑色浮窗按鈕了,點擊隨時可以查看app的網路請求信息了

這個時候自己實現一下 HCNetDataConvert 介面,對數據進行解密

然後在攔截器中實例化

其實這個很簡單,但是自己一直沒發現有人寫,所以自己就寫了個,方便大家,如果有人寫了而且寫的功能更強大,請告訴我學習學習

Ⅶ Android:通過WifiManager監聽Wifi信號強弱

先來了解下Android如何獲取wifi的信息:

WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE);

WifiInfo wifiInfo = wifi_service.getConnectionInfo();

其中WifiManager是管理wifi的最重要的類,詳細請參考

http://developer.android.com/reference/android/net/wifi/WifiManager.html

其中wifiInfo有以下的方法:

wifiinfo.getBSSID();

wifiinfo.getSSID();

wifiinfo.getIpAddress();獲取IP地址。

wifiinfo.getMacAddress();獲取MAC地址。

wifiinfo.getNetworkId();獲取網路ID。

wifiinfo.getLinkSpeed();獲取連接速度,可以讓用戶獲知這一信息。

wifiinfo.getRssi();獲取RSSI,RSSI就是接受信號強度指示。在這可以直 接和華為提供的Wi-Fi信號閾值進行比較來提供給用戶,讓用戶對網路或地理位置做出調整來獲得最好的連接效果。

這里得到信號強度就靠wifiinfo.getRssi();這個方法。得到的值是一個0到-100的區間值,是一個int型數據,其中0到-50表示信號最好,-50到-70表示信號偏差,小於-70表示最差,有可能連接不上或者掉線,一般Wifi已斷則值為-200。

界面很簡單,只有一個ImageView用來顯示圖片,activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

    <ImageView

        android:id="@+id/wifi_image"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginLeft="145dp"

        android:layout_gravity="center" />

</LinearLayout>

用於獲得信號強度並改變圖片的Activity:MainActivity

package com.my.phonesingle;

import java.util.Timer;

import java.util.TimerTask;

import android.annotation.SuppressLint;

import android.app.Activity;

import android.net.wifi.WifiInfo;

import android.net.wifi.WifiManager;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.ImageView;

import android.widget.Toast;

public class MainActivity extends Activity {

private WifiInfo wifiInfo = null; //獲得的Wifi信息

private WifiManager wifiManager = null; //Wifi管理器

private Handler handler;

private ImageView wifi_image; //信號圖片顯示

private int level; //信號強度值

@SuppressLint("HandlerLeak")

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//圖片控制項初始化

wifi_image = (ImageView) findViewById(R.id.wifi_image);

// 獲得WifiManager

wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);

// 使用定時器,每隔5秒獲得一次信號強度值

Timer timer = new Timer();

timer.scheleAtFixedRate(new TimerTask() {

@Override

public void run() {

wifiInfo = wifiManager.getConnectionInfo();

//獲得信號強度值

level = wifiInfo.getRssi();

//根據獲得的信號強度發送信息

if (level <= 0 && level >= -50) {

Message msg = new Message();

msg.what = 1;

handler.sendMessage(msg);

} else if (level < -50 && level >= -70) {

Message msg = new Message();

msg.what = 2;

handler.sendMessage(msg);

} else if (level < -70 && level >= -80) {

Message msg = new Message();

msg.what = 3;

handler.sendMessage(msg);

} else if (level < -80 && level >= -100) {

Message msg = new Message();

msg.what = 4;

handler.sendMessage(msg);

} else {

Message msg = new Message();

msg.what = 5;

handler.sendMessage(msg);

}

}

}, 1000, 5000);

// 使用Handler實現UI線程與Timer線程之間的信息傳遞,每5秒告訴UI線程獲得wifiInto

handler = new Handler() {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

// 如果收到正確的消息就獲取WifiInfo,改變圖片並顯示信號強度

case 1:

wifi_image.setImageResource(R.drawable.single4);

Toast.makeText(MainActivity.this,

"信號強度:" + level + " 信號最好", Toast.LENGTH_SHORT)

.show();

break;

case 2:

wifi_image.setImageResource(R.drawable.single3);

Toast.makeText(MainActivity.this,

"信號強度:" + level + " 信號較好", Toast.LENGTH_SHORT)

.show();

break;

case 3:

wifi_image.setImageResource(R.drawable.single2);

Toast.makeText(MainActivity.this,

"信號強度:" + level + " 信號一般", Toast.LENGTH_SHORT)

.show();

break;

case 4:

wifi_image.setImageResource(R.drawable.single1);

Toast.makeText(MainActivity.this,

"信號強度:" + level + " 信號較差", Toast.LENGTH_SHORT)

.show();

break;

case 5:

wifi_image.setImageResource(R.drawable.single0);

Toast.makeText(MainActivity.this,

"信號強度:" + level + " 無信號", Toast.LENGTH_SHORT)

.show();

break;

default:

//以防萬一

wifi_image.setImageResource(R.drawable.single0);

Toast.makeText(MainActivity.this, "無信號",

Toast.LENGTH_SHORT).show();

}

}

};

}

}

然後只需要打開Wifi測試一下,就行啦!

Ⅷ Android監聽網路狀態框架

就這么簡單,讓我們開始吧。

看下最終實現的使用:

日誌:

好了,新建一個AndroidLibray開始實現。

許可權走一波:

首先,咱們需要一個監聽網路狀態的工具類

在lib中創建一個廣播,然後再配置文件里注冊一下。

完善下咱們的receiver:

監聽介面:

manager:

再加上一個枚舉類:

OK,一套正常操作,一個最普通網路監聽類寫完了。接著咱們嘗試用註解,讓這個小框架看的有檔次些。

完善一下自定義註解:

然後來捋一下思路:

照樣是固定三部曲,按照步驟來:

1.先完善我們的注冊方法

在這里,我創建了一個方法封裝類。比較簡單: MethodManager

這里的 mMethodList 是方法封裝類(MethodManager)的List,用來存儲篩選後的MainActivity中方法,也就是網路監聽方法。以下是方法的篩選:

咱們定義一個post方法,去完成這項工作:

這里實現了通過網路監聽註解上方的參數,我們可以單獨監聽某一種網路狀態的變化。比如

上方參數表明,只有在WIFI斷開和連接的時候,方法才會做出響應。想要所有提示設置為AUTO就行啦。

OK,做完邏輯以後執行一下:

大功告成!跑一下看看效果!

項目地址: https://github.com/CocoYuki/NetListener

是一個練手的小項目,實際網路請求在7.0時就能通過一個CallBack輕松搞定了。

Ⅸ Android 超簡單實現網路狀態的監聽

我們做項目的時候,不可避免的要做網路狀態的監聽,一般我們都是抽取出一個工具類來實現,比如:

細致的你當然還會再寫一個判斷網路類型的方法,反手再來一個例:

然後就可以在相應的操作前進行判斷網路的判斷:

但是這樣做也有些問題:

接下來就是本文的重點,如何通過 NetStatusBus 這個庫來解決以上問題,讓你的網路狀態監聽變得前所未有的簡單粗暴。

到這里就已經結束了,你的所有網路操作已經都可以清晰優雅的在訂閱方法中進行處理了,當然你也可以繼續往下看。

訂閱方法必須填寫一個NetType參數,可以通過NetType的值來判斷當前網路類型。

@NetSubscribe中 netType為可選值,可以設置訂閱的類型,可選值類型如下:

NetType.AUTO

這是默認值,任何網路狀態發生變化,該類型訂閱者都會被回調。同時會傳入NetType參數告知你當前的網路類型,示例如下:

只要當前是由 WIFI 改變引發的網路狀態變化,該類型訂閱者都會被回調。同時會傳入NetType參數告知你當前的網路類型,示例如下:

只要當前是由移動網路改變引發的網路狀態變化,該類型訂閱者都會被回調。同時會傳入NetType參數告知你當前的網路類型,示例如下:

NetType.NONE

只有當網路丟失時,該類型訂閱者才會被回調。

有人會覺得,我用個庫爽就行了管它的原理干什麼?

你放心,我只是小小的描述一下實現方式。

原理簡單來說,就是在全局初始化的時候就綁定對網路的變化監聽。然後將進行注冊的父類所有的訂閱方法保存至集合中,這里涉及到一些方法的校驗,最後在網路狀態發生改變時利用 Java 反射機制遍歷執行所有訂閱方法。熟悉 EventBus 的小夥伴已經看出來了這里借鑒了一小部分 EventBus 的思想。

回到第一步,那麼具體是如何綁定對網路狀態變化的監聽呢?

以前我們是通過注冊廣播來實現綁定網路變更的監聽,在Android 7.0 以後,Google 基逗陵於性能和安全原因對廣播進行了很多限制,比如監褲衫聽網路變更的廣播 android.net.conn.CONNECTIVITY_CHANGE 使用靜態注冊的方式則無法生效,而動態注冊的方式雖然可以生效但畢竟不是最優解。

同樣出於性能和安全,以及擁抱變化的角度,最終我們還是使用官方推薦的方式,利用 ConnectivityManager.NetworkCallback 來進行網路變化的監聽,這是在Android 5.0即android api 21推出的API,目前Android 5.0以上的市場佔有率在 85%以上,隨著國內各大廠商正在積極的推進適配普及Android Q,這個比例還會進一步增大,所以個人人認為無需過於擔心低版本適配。

使用的時候出現這個問題是由於少添加了許可權。胡指腔

Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.

java.lang.RuntimeException: Unable to create application com.jiyun.wanandroid.WanApplication: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.

加上這幾個許可權就好了:

附上原文地址: https://www.jianshu.com/p/2fea980b3e56

閱讀全文

與android監聽網路可用相關的資料

熱點內容
正版我的世界如何進伺服器地址 瀏覽:658
雲文檔怎樣加密 瀏覽:294
ip協議的遠程登錄命令 瀏覽:286
阿里雲伺服器可以幫別人備案嗎 瀏覽:391
臟數據java 瀏覽:290
游戲解壓怎麼設置 瀏覽:782
會聲會影如何壓縮視頻 瀏覽:57
閱讀app小說怎麼轉換成txt 瀏覽:65
c語言編程數字變時間 瀏覽:655
迷你編程第五天初級寶箱怎麼弄 瀏覽:839
刺激體驗服如何更新伺服器 瀏覽:934
怎麼把照片做成新的文件夾 瀏覽:466
安卓手機沒有聲音均衡器怎麼辦 瀏覽:506
吃雞國際服為什麼會伺服器匆忙 瀏覽:248
微信中如何打開定位伺服器 瀏覽:203
java並發編程書籍 瀏覽:280
android601源碼 瀏覽:788
程序員離職了還能幹嘛 瀏覽:156
少林功法pdf 瀏覽:471
安卓80版本小游戲怎麼玩 瀏覽:632