在android中對Wifi操作,android本身提供了一些有用的包,在android.net.wifi包下面。主要包括以下幾個類和介面: 1.ScanResult 主要用來描述已經檢測出的接入點,包括接入點的地址,接入點的名稱,身份認證,頻率,信號強度等信息。 2.WifiConfiguration Wifi網路的配置,包括安全設置等。 3.WifiInfo wifi無線連接的描述,包括接入點,網路連接狀態,隱藏的接入點,IP地址,連接速度,MAC地址,網路ID,信號強度等信息。這里簡單介紹一下這里的方法: getBSSID() 獲取BSSID getDetailedStateOf() 獲取客戶端的連通性 getHiddenSSID() 獲得SSID 是否被隱藏 getIpAddress() 獲取IP 地址 getLinkSpeed() 獲得連接的速度 getMacAddress() 獲得Mac 地址 getRssi() 獲得802.11n 網路的信號 getSSID() 獲得SSID getSupplicanState() 返回具體客戶端狀態的信息 4.WifiManager 這個不用說,就是用來管理我們的wifi 連接,這里已經定義好了一些類,可以供我們使用。 獲取WIFI網卡的狀態 WIFI網卡的狀態是由一系列的整形常量來表示的。 1.WIFI_STATE_DISABLED : WIFI網卡不可用(1) 2.WIFI_STATE_DISABLING : WIFI網卡正在關閉(0) 3.WIFI_STATE_ENABLED : WIFI網卡可用(3) 4.WIFI_STATE_ENABLING : WIFI網正在打開(2) (WIFI啟動需要一段時間) 5.WIFI_STATE_UNKNOWN : 未知網卡狀態 最重要的一個就是 你要設置許可權 最重要的一個就是 你要設置許可權 希望幫助到你
『貳』 在android上查看wifi狀態,代碼如下:
不知道你的程序報的是什麼錯,給你一個例子吧,不過方法和你的有點差別:
public class WifiAdmin {
/**WiFi Manager**/
private WifiManager wifimanager;
/**WiFi Information**/
private WifiInfo wifiinfo;
/**Activity NetWork List**/
private List<ScanResult> netlist;
/**Configured NetWork List**/
private List<WifiConfiguration> connectedlist;
/**WiFi Lock**/
private WifiLock wifilock;
public WifiAdmin(Context context) {
wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
}
/**
* WiFi Operate
* */
/**Open WiFi**/
public void openWifi() {
if (!wifimanager.isWifiEnabled()) {
wifimanager.setWifiEnabled(true);
}
}
/**Close WiFi**/
public void closeWifi() {
if (wifimanager.isWifiEnabled()) {
wifimanager.setWifiEnabled(false);
}
}
/**WiFi State**/
public int checkState() {
return wifimanager.getWifiState();
}
/**
* WiFiLock Operate
* */
/**Create WiFiLock**/
public void creatWifiLock() {
wifilock = wifimanager.createWifiLock("Test");
}
/**Lock WiFi**/
public void acquireWifiLock() {
wifilock.acquire();
}
/**Clear WiFiLock**/
public void releaseWifiLock() {
if (wifilock.isHeld()) {
wifilock.release();
}
}
/**
* WiFiInfo Operate
* */
/**Get WiFiInfo**/
public WifiInfo getWifiInfo(){
wifiinfo = wifimanager.getConnectionInfo();
return wifiinfo;
}
/**
* NetWork Operate
* */
/**Scan**/
public void startScan() {
wifimanager.startScan();
netlist = wifimanager.getScanResults();
connectedlist = wifimanager.getConfiguredNetworks();
}
/**Get Configured NetWork**/
public List<WifiConfiguration> getConfiguration() {
return connectedlist;
}
/**Get Activity NetWork**/
public List<ScanResult> getWifiList() {
return netlist;
}
/**Connect a NetWork**/
public void connectConfiguration(int index) {
if (index < 0 || index > connectedlist.size()) {
return;
}
wifimanager.enableNetwork(connectedlist.get(index).networkId,true);
}
/**Add a NetWork**/
public void addNetwork(WifiConfiguration wcg) {
int wcgID = wifimanager.addNetwork(wcg);
wifimanager.enableNetwork(wcgID, true);
}
/**DisConnect a NetWork**/
public void disconnectWifi(int netId) {
wifimanager.disableNetwork(netId);
wifimanager.disconnect();
}
}
『叄』 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調試。
『肆』 android 代碼怎麼實時監控連接當前wifi熱點的設備的連接或斷開事件
請參考以下代碼實現監控:
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfo = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
// BSToast.showLong(context, "網路不可以用");
// 改變背景或者 處理網路的全局變數
} else {
// 改變背景或者 處理網路的全局變數
}
把上的代碼放到一個廣播裡面。。
『伍』 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監聽wifi狀態改變的廣播靠譜嗎
1、靠譜,這是android的基本常識!
2、只要wifi的底層驅動和wifi模塊沒有問題,廣播消息不會被其他應用堵塞下,監聽wifi狀態,都會收到wifi狀態改變的消息的!
『柒』 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;
}
}
『捌』 什麼安卓軟體可以監控wifi流量
LBE安全大師,360安全衛士等防護軟體都可以監控wifi流量
安全軟體分為殺毒軟體,系統工具和反流氓軟體。安全軟體是一種可以對病毒、木馬等一切已知的對計算機有危害的程序代碼進行清除的程序工具。安全軟體也是輔助您管理電腦安全的軟體程序,安全軟體的好壞決定了殺毒的質量,通過VB100以及微軟WINDOWS驗證的殺毒軟體才是安全軟體領域的最好選擇
軟體原理
安全軟體中反病毒軟體原理
反病毒軟體的任務是實時監控和掃描磁碟。部分反病毒軟體通過在系統添加驅動程序的方式,進駐系統,並且隨操作系統啟動。大部分的殺毒軟體還具有防火牆功能。
反病毒軟體的實時監控方式因軟體而異。有的反病毒軟體,是通過在內存里劃分一部分空間,將電腦里流過內存的數據與反病毒軟體自身所帶的病毒庫(包含病毒定義)的特徵碼相比較,以判斷是否為病毒。另一些反病毒軟體則在所劃分到的內存空間裡面,虛擬執行系統或用戶提交的程序,根據其行為或結果作出判斷。
而掃描磁碟的方式,則和上面提到的實時監控的第一種工作方式一樣,只是在這里,反病毒軟體將會將磁碟上所有的文件(或者用戶自定義的掃描范圍內的文件)做一次檢查。