android - 在android中根据信号强度加载不同的wifi信号强度图像

标签 android android-wifi

我正在尝试在我的 android 应用程序上显示图像(代表 wifi 信号强度的基本图像)。我尝试用下面的代码实现它

public View getView(int position, View convertView, ViewGroup parent) {

		LayoutInflater inflater = (LayoutInflater) MainActivity.this
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		View view = inflater.inflate(R.layout.wifi_row, parent, false);
		S_ID = (TextView) view.findViewById(R.id.SSID);
		BSSID = (TextView) view.findViewById(R.id.BSSID);
		wifi_strength = (ImageView) view.findViewById(R.id.wifi_signal);
		wifi_lock = (ImageView) view.findViewById(R.id.wifi_lock);
		S_ID.setText(my_array.get(position));
		BSSID.setText(wifiScanList.get(position).BSSID);
		
		
		int current_level = 5;
		int signal_level = WifiManager.calculateSignalLevel(mainWifiObj
				.getConnectionInfo().getRssi(), current_level);
		int signal_difference = (signal_level * 100) / current_level;
		
		Log.d("Signal_level", String.valueOf(signal_level));

		if (signal_difference >= 100) {
			wifi_strength.setImageResource(R.drawable.wifi_signal_4);
		} else if (signal_difference >= 75) {
			wifi_strength.setImageResource(R.drawable.wifi_signal_3);
		} else if (signal_difference >= 50) {
			wifi_strength.setImageResource(R.drawable.wifi_signal_2);
		} else if (signal_difference >= 25) {
			wifi_strength.setImageResource(R.drawable.wifi_signal_1);
		}

下面是我的接收器类

protected void onPause() {
	unregisterReceiver(wifiReciever);
	super.onPause();
}

protected void onResume() {
	registerReceiver(wifiReciever, new IntentFilter(
			WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
	super.onResume();
}

class WifiScanReceiver extends BroadcastReceiver {
	@SuppressLint("UseValueOf")
	public void onReceive(Context c, Intent intent) {
		wifiScanList = mainWifiObj.getScanResults();
		for (int i = 0; i < wifiScanList.size(); i++) {
			my_array.add((wifiScanList.get(i)).SSID);
		}
		myAdapter.notifyDataSetChanged();
	}
} 

但即使对于最弱的 wifi 网络,它也始终显示全信号 wifi 图像。

知道如何做到这一点吗?

最佳答案

我自己解决了这个问题。使用一个 hashMap 来存储 SSID 和对应的信号强度。在 getView 方法中,我使用 SSID( key )检索了信号电平(值)。

下面的代码对我有用

 int wifiSignalLevel = wifi_level.get(my_array.get(position));

        Log.d(my_array.get(position) + " Strength ",
                String.valueOf(wifiSignalLevel));

        if (wifiSignalLevel >= -70) {
            wifi_strength.setImageResource(R.drawable.wifi_signal_4);
        } else if (wifiSignalLevel >= -80) {
            wifi_strength.setImageResource(R.drawable.wifi_signal_3);
        } else if (wifiSignalLevel >= -90) {
            wifi_strength.setImageResource(R.drawable.wifi_signal_2);
        } else if (wifiSignalLevel >= -100) {
            wifi_strength.setImageResource(R.drawable.wifi_signal_1);
        }

关于android - 在android中根据信号强度加载不同的wifi信号强度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26252671/

相关文章:

android - 为 WiFi 连接禁用三星 "Auto Network Switch"

android - 如何将 ZIP 文件导入 Android Studio?

android - libGdx 无法在 android 应用程序数据目录中找到文件

Android 自定义 Wifi 扫描

android - 在没有GPS的Android 8.1中获取WIFI SSID

android studio 1.5.1,棉花糖未检测到互联网访问不会自动重新连接

Android Google MapView 仅显示空图 block

java - Android - 如何处理异步 Http 崩溃

android - 从 HttpClient 到 HttpURL 连接

android - 获取范围内 WiFi 网络的 MAC 地址