當前位置:首頁 » 安卓系統 » android監聽wifi

android監聽wifi

發布時間: 2023-01-02 05:44:22

A. android wifi切換路由器怎麼監聽

第一步:手機的設置:下載超級終端Better Terminal。各大市場應該大把大把的,我是在豌豆莢上下載的。下載完後在手機安裝上,點擊進入,其中有個選項是開啟gui還是shell,對於我們android開發者來說當然是選擇比較牛逼的shell了。進入後輸入如下內容:
setprop service.adb.tcp.port 5555
stop adbd
start adbd
這樣你的手機就配置好了tcpip的網路調試埠了。

第二步:電腦的配置:將手機通過usb連接到電腦上,cmd到你的androidsdk的目錄下的platform-tools目錄執行:
adb tcpip 5555
將機器上的adb切換為網路模式,後面5555是埠號,當然你也可以寫其他埠號,只要你的手機的這個埠號沒有被使用就可以了.

第三步:電腦配置:運行cmd,輸入
adb connect <你手機IP>:5555
例如:adb connect 10.7.10.3:5555 ,其中10.7.10.3是我的手機的ip地址你輸入你的手機的ip地址即可。
如果成功的話,會提示 connected to 10.7.10.3:5555
現在你的電腦就可以通過wifi連接電腦調試了,當然你通過eclipse進行調試也是沒問題的。

第四步:當你使用完wifi調試的時候,請連接手機後cmd輸入adb usb,切換回usb調試。

B. Android的WiFi功能總結

先進行WiFi許可權的聲明

<!-- 獲取WiFi狀態 -->

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

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

<!--  api <= Android29調用setWifiEnabled  -->

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

<!-- 定位許可權(api >= 23 用於 WIFI掃描)-->

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

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

注意:ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION是危險級許可權需要使用中還需要動態申請,申請其中一個即可。

WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.R) {

Intent panelIntent =new Intent(Settings.Panel.ACTION_WIFI);

startActivityForResult(panelIntent,null);

}else{ mWifiManager.setWifiEnabled(!isEnable);}

可以通過監聽系統廣播來了解WiFi狀態。

WIFI_STATE_CHANGED_ACTION:WiFi開關狀態;

SCAN_RESULTS_AVAILABLE_ACTION:WiFi列表變化;

RSSI_CHANGED_ACTION:WiFi信號強度變化。

IntentFilter mFilter =new IntentFilter();

mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);

mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);

mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);

mReceiver =new BroadcastReceiver() {

@Override

public void onReceive(Context context,Intent intent) {

    handleEvent(intent);

}

};

registerReceiver(mReceiver, mFilter);

private void handleEvent(Intent intent) {

String action = intent.getAction();

if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {

final int wifiState =mWifiManager.getWifiState();

if(wifiState ==WifiManager.WIFI_STATE_ENABLED){

    postDelayed(()->{mRefreshLayout.autoRefresh();},1000);

}

}else if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {

}else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {

if(System.currentTimeMillis() -mLastUpateWifiRssiTime <1000){//刷新太快

            return;

}

}

updateWifiChange();

}

切記:wifistate切換到WifiManager.WIFI_STATE_ENABLED,mWifiManager.isWifiEnabled()需要有個等待時間切換。

3的基礎上解析廣播應答

private void updateWifiChange() {

final int wifiState =mWifiManager.getWifiState();

switch (wifiState) {

case WifiManager.WIFI_STATE_ENABLED:

ArrayListresults = (ArrayList)mWifiManager.getScanResults();

updateApListView(results);

mWlanSb.setChecked(mWifiManager.isWifiEnabled() );

break;

case WifiManager.WIFI_STATE_ENABLING:

break;

case WifiManager.WIFI_STATE_DISABLING:

mAdapter.clearData();

mWlanSb.setChecked(mWifiManager.isWifiEnabled() );

break;

case WifiManager.WIFI_STATE_DISABLED:

break;

}

}

C. android監聽wifi狀態改變的廣播靠譜嗎

1、靠譜,這是android的基本常識!
2、只要wifi的底層驅動和wifi模塊沒有問題,廣播消息不會被其他應用堵塞下,監聽wifi狀態,都會收到wifi狀態改變的消息的!

D. 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

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

流程框架

基礎知識

源碼

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

2.ConnectivityService的registerNetworkAgent創建NetworkAgentInfo

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

4.NetworkMonitor

adb控制

問題

參考學習

F. 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測試一下,就行啦!

G. android wifi監聽需要哪些action

需要監聽以下3個action
<action android:name="android.NET.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.Net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />

H. android 監聽到wifi狀態的廣播怎麼存儲

package com.example.floatdialogtest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;

public class WifiReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(WifiManager.RSSI_CHANGED_ACTION)){
//signal strength changed
}
else if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){//wifi連接上與否
System.out.println("網路狀態改變");
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if(info.getState().equals(NetworkInfo.State.DISCONNECTED)){
System.out.println("wifi網路連接斷開");
}
else if(info.getState().equals(NetworkInfo.State.CONNECTED)){

WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();

//獲取當前wifi名稱
System.out.println("連接到網路 " + wifiInfo.getSSID());

}

}
else if(intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)){//wifi打開與否
int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED);

if(wifistate == WifiManager.WIFI_STATE_DISABLED){
System.out.println("系統關閉wifi");
}
else if(wifistate == WifiManager.WIFI_STATE_ENABLED){
System.out.println("系統開啟wifi");
}
}
}
}

I. 【原創】安卓開啟WIFI調試

拿手機來調試,一天下來沒多久就滿電了,怕電池hold不住,找了個遠程調試的辦法。下面是操作步驟,給有需要的人幫助。

1、手機開啟USB調試模式

2、將手機連接到電腦上

3、命令行執行adb tcpip 5555(啟動手機上的adbd守護進程,並監聽5555埠,默認埠為5555,可使用其它埠)

4、獲取手機連接的wifi地址(命令行查看adb shell ip address show wlan0)

5、通過adb connect命令連接

註:adb connect需要和adb tcpip所使用的埠一致,如果不一致,則無法連接到該手機。

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:642
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:369
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:89
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:312
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:795
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:348
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:213
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:819
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:369
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:596