【发布时间】:2012-07-08 12:33:37
【问题描述】:
我正在尝试在我的 Android 应用中显示连接的 WiFi 网络的信号强度。我尝试了以下方法:
//Receiver for information on the network info
private BroadcastReceiver mNetworkReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("INFO", "onReceive()");
List<ScanResult> scanResult = mWifi.getScanResults();
for(ScanResult scan : scanResult)
{
Log.d("INFO","Network strength: " + String.valueOf(scan.level) + " dBm " + scan.SSID);
}
}
};
然后我在 onResume()/onPause() 上注册/注销我的接收器:
@Override
public void onResume()
{
super.onResume();
mActivity.registerReceiver(mNetworkReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); //network info
}
@Override
public void onPause()
{
super.onPause();
mActivity.unregisterReceiver(mNetworkReceiver);
}
但这似乎不起作用。我还启用了ACCESS_WIFI_STATE 权限。我的接收器只有在我手动调用<WiFiManager>.startScan() 时才会被调用,但我正试图让它与我的广播接收器一起工作,以便在信号强度发生变化时始终显示信号强度。我注意到onReceive() 提供了一个列表,如果我只想要连接网络的统计信息,则该列表是不必要的。有什么办法可以改变吗?
编辑:另外,我意识到对此有一些相关的问题,但我读过的那些并没有太大帮助。
编辑2:澄清了我的问题。主要问题是我的接收器永远不会被调用,除非我调用startScan()。
【问题讨论】:
-
你肯定是在用 WifiManager 吠叫正确的树:,但是“calculateSignalLevel()”等呢:developer.android.com/reference/android/net/wifi/…
-
我的广播接收器中不需要它吗?现在我的接收器甚至没有被调用,除非我手动执行
startScan()。每次信号强度变化时不应该呼叫我的接收器吗? -
@Atlos.. 所以你想在应用程序开始运行时获得有关 wifi 信号强度的信息.. 使用 BReceiver?如果我错了,请清除我,我已经这样做了。我们可以解决您的问题
-
@RDC 是的。因此,当我的应用程序运行时,它会显示当前的网络强度,类似于手机顶部指示强度的条形数量的变化。
-
@Atlos.. 好吧,让我根据您的需要修改我的代码快照,如果对您有帮助,请告诉我
标签: android broadcastreceiver android-wifi