Android WifiManager.WifiLock 简介

经过查看网上的资料,知道在手机屏幕关闭之后,并且其他的应用程序没有在使用wifi的时候,系统大概在两分钟之后,会关闭wifi,使得wifi处于睡眠状态。

这样的做法,有利于电源能量的节省和延长电池寿命等。

Android为wifi提供了一种叫WifiLock的锁,能够阻止wifi进入睡眠状态,使wifi一直处于活跃状态。这种锁,在下载一个较大的文件的时候,比较适合使用。

WifiLock Allows an application to keep the Wi-Fi radio awake.

一、创建一个wifiLock

1. 

[java]  view plain  copy
  1. /** 
  2.  *  
  3.  * @param lockName 
  4.  *            锁的名字 
  5.  * @return wifiLock 
  6.  */  
  7. public WifiLock createWifiLock(String lockName)  
  8. {  
  9.     wifiLock = wifiManager.createWifiLock(lockName);  
  10.     return wifiLock;  
  11.   
  12. }  
 2. 

[java]  view plain  copy
  1. /** 
  2.      *  
  3.      * @param lockName 
  4.      *            锁的名称 
  5.      * @param lockType 
  6.      *  
  7.      *            WIFI_MODE_FULL == 1 <br/> 
  8.      *            扫描,自动的尝试去连接一个曾经配置过的点<br /> 
  9.      *            WIFI_MODE_SCAN_ONLY == 2 <br/> 
  10.      *            只剩下扫描<br /> 
  11.      *            WIFI_MODE_FULL_HIGH_PERF = 3 <br/> 
  12.      *            在第一种模式的基础上,保持最佳性能<br /> 
  13.      * @return wifiLock 
  14.      */  
  15.     public WifiLock createWifiLock(String lockName, int lockType)  
  16.     {  
  17.         wifiLock = wifiManager.createWifiLock(lockType, lockName);  
  18.         return wifiLock;  
  19.     }  

二、给wifi添加锁

[java]  view plain  copy
  1. /** 
  2.  * 加上锁 
  3.  */  
  4. public void lockWifi()  
  5. {  
  6.     wifiLock.acquire();  
  7. }  

三、给wifi释放锁

[java]  view plain  copy
  1. /** 
  2.  * 释放锁 
  3.  */  
  4. public void releaseLock()  
  5. {  
  6.     if (wifiLock.isHeld())  
  7.     {  
  8.         wifiLock.release();  
  9.     }  
  10. }  

四、判断wifi是否被lock锁持用

[java]  view plain  copy
  1. /** 
  2.  * 判断wifi的锁是否持有 
  3.  *  
  4.  * @return 
  5.  */  
  6. public boolean isHeld()  
  7. {  
  8.     return wifiLock.isHeld();  
  9. }  

是的,从Android 9(API级别28)开始,`WifiManager.startScan()`已被标记为过时。取而代之的是`WifiManager.startScan()`方法的替代方法`WifiManager.getScanResults()`。 以下是一个更新后的示例代码: ```java public class WifiScanner extends AppCompatActivity { private WifiManager wifiManager; private List<ScanResult> scanResults; private StringBuilder stringBuilder = new StringBuilder(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wifi_scanner); wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); Button scanButton = findViewById(R.id.scanButton); scanButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { scanWifi(); } }); TextView wifiListTextView = findViewById(R.id.wifiListTextView); wifiListTextView.setMovementMethod(new ScrollingMovementMethod()); } private void scanWifi() { stringBuilder = new StringBuilder(); if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); } wifiManager.startScan(); Toast.makeText(this, "Scanning WiFi ...", Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { scanResults = wifiManager.getScanResults(); for (ScanResult scanResult : scanResults) { stringBuilder.append("SSID: ") .append(scanResult.SSID) .append(" , BSSID: ") .append(scanResult.BSSID) .append(" , RSSI: ") .append(scanResult.level) .append("\n\n"); } TextView wifiListTextView = findViewById(R.id.wifiListTextView); wifiListTextView.setText(stringBuilder.toString()); } }, 5000); // 5 seconds delay } } ``` 在此示例中,我们使用了`WifiManager.getScanResults()`方法来获取扫描结果。我们还使用了`Handler`来添加5秒的延迟,以便给WiFi扫描一些时间来完成。一旦扫描完成,我们遍历每个扫描结果,并将它们附加到`StringBuilder`中,最后将其显示在TextView中。 虽然`WifiManager.startScan()`仍然可以在Android 10及更低版本中使用,但我们建议使用`WifiManager.getScanResults()`,以确保代码在未来的Android版本中仍然可以正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值