android 获取wifi和移动网络信号强度

news/2024/10/29 4:21:51/

1. 获取wifi信号强度

可以直接监听广播

MyReceiver receiver = new RssiReceiver();
IntentFilter intentFilter = new IntentFilter(WifiManager.RSSI_CHANGED_ACTION);
registerReceiver(receiver,intentFilter);class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {int rssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI,-1);//这函数可以计算出信号的等级int strength = WifiManager.calculateSignalLevel(rssi, 5);}
}

也可以从NetworkCallback中获取

@RequiresApi(api = Build.VERSION_CODES.N)
private void registerNetwork(){ConnectivityManager connMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {connMgr.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback(){@Overridepublic void onAvailable(@NonNull Network network) {super.onAvailable(network);Log.d("NetworkCallback", "onAvailable: "+network);}@Overridepublic void onLinkPropertiesChanged(@NonNull Network network, @NonNull LinkProperties linkProperties) {super.onLinkPropertiesChanged(network, linkProperties);Log.d("NetworkCallback", "onLinkPropertiesChanged: "+network);}@Overridepublic void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {super.onCapabilitiesChanged(network, networkCapabilities);Log.d("NetworkCallback", "onCapabilitiesChanged: "+networkCapabilities.toString());if(networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)){//判断是wifi还是移动网络if(networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)){int strength = WifiManager.calculateSignalLevel(networkCapabilities.getSignalStrength(), 5);}else {}}}@Overridepublic void onLosing(@NonNull Network network, int maxMsToLive) {super.onLosing(network, maxMsToLive);Log.d("NetworkCallback", "onLosing: "+network);}@Overridepublic void onLost(@NonNull Network network) {super.onLost(network);Log.d("NetworkCallback", "onLost: "+network);}@Overridepublic void onUnavailable() {super.onUnavailable();Log.d("NetworkCallback", "onUnavailable: ");}});}
}

注意 networkCapabilities.getSignalStrength()在API29的时候才可以调用,低于29的时候为隐藏方法.可用反射调用。onCapabilitiesChanged这个函数在wifi强度变化时会调用,但是移动网络强度变化时确不会调用,而且在移动网络时getSignalStrength方法获取到的也不是信号强度。

2. 获取移动网络强度

可以直接监听PhoneStateListener,这里只是单卡的情况

private void phoneStateListener(){TelephonyManager mTelephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);mTelephonyManager.listen(new PhoneStateListener(){@RequiresApi(api = Build.VERSION_CODES.M)@Overridepublic void onSignalStrengthsChanged(SignalStrength signalStrength) {super.onSignalStrengthsChanged(signalStrength);int level = signalStrength.getLevel();Log.d("phoneStateListener", "onSignalStrengthsChanged: level "+level);}@Overridepublic void onServiceStateChanged(ServiceState state) {Log.d("phoneStateListener", "onServiceStateChanged: "+state.toString());}@Overridepublic void onDataConnectionStateChanged(int state, int networkType) {Log.d("phoneStateListener", "onDataConnectionStateChanged: state "+state+" networkType "+networkType);}}, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE | PhoneStateListener.LISTEN_SERVICE_STATE);
}

如果是双卡的情况可以通过反射调用。但是我发现一个非常奇怪的现象,当打开相机时这里面的所有方法都会停止调用,原因不知道。没办法,只能取修改系统源码了,修改SystemUI的MobileSignalController.java

 @Overridepublic void onSignalStrengthsChanged(SignalStrength signalStrength) {if (DEBUG) {Log.d(mTag, "onSignalStrengthsChanged signalStrength=" + signalStrength +((signalStrength == null) ? "" : (" level=" + signalStrength.getLevel())));}mSignalStrength = signalStrength;updateTelephony();//信号有强度有变化时发送广播	Intent intent = new Intent("android.net.mobile.RSSI_CHANGED");intent.putExtra("EXTRA_NEW_RSSI", signalStrength.getLevel());mContext.sendBroadcast(intent);}

http://www.ppmy.cn/news/742782.html

相关文章

Android获取WIFI信号强度

1. 利用Android下的WifiManager获取可见的SSID WifiManager wifiMg (WifiManager)act.getSystemService(act.WIFI_SERVICE);List<ScanResult> list wifiMg.getScanResults(); 然后对ScanResult里的每个值进行枚举&#xff0c;ScanResult里的是一个level&#xff0c;需要…

Android 12.0 修改wifi信号强度

1.前言 在12.0的系统rom产品定制化开发中,在进行产品开发中,对应系统定制会有各种各样的需求,对纯wifi产品而言,对于wifi要求也是越来越高,因此有客户要求对wifi信号强度做定制,修改信号强度来增强显示wifi信号,所以要对wifi显示信号强度的相关代码做修改 2.修改wifi…

关于检测手机信号强度,wifi信号强度以及检测周围wifi热点的一个小例子

一.检测手机信号强度 检测手机信号强度需要用到TelephonyManager类 这个类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。还有监听手机内部的状…

无线信号强度解析及linux如何查看wifi信号强弱等

dB dB是一个表征相对值的值&#xff0c;纯粹的比值&#xff0c;只表示两个量的相对大小关系&#xff0c;没有单位&#xff0c;当考虑甲的功率相比于乙功率大或小多少个dB时&#xff0c;按下面的计算公式&#xff1a;10log&#xff08;甲功率/乙功率&#xff09;&#xff0c;如果…

Android 11.0 修改wifi信号强度

目录 1.概述 2.修改wifi信号强度的核心代码 3.修改wifi信号强度的功能分析以及实现功能

WiFi信号强度--SIGNAL_POLL

1. 信号强度算法 WifiManager.java /** Anything worse than or equal to this will show 0 bars. */private static final int MIN_RSSI -100;/** Anything better than or equal to this will show the max bars. */private static final int MAX_RSSI -55;/*** Calculates…

android 获取wifi 信号质量,信号强度

android 获取wifi 信号质量 编辑 | 删除 int strength = WifiManager.calculateSignalLevel(info.getRssi(), 5);即信号强度。

Android 获取wifi信号强度

先来了解下Android如何获取wifi的信息&#xff1a; WifiManager wifi_service (WifiManager)getSystemService(WIFI_SERVICE); WifiInfo wifiInfo wifi_service.getConnectionInfo(); 其中wifiInfo有以下的方法&#xff1a; wifiinfo.getBSSID()&#xff1b; wifiinfo.g…