Android获取移动数据信号强度(API<;17)
我正在制作一个可以获取Wi-Fi和移动数据信息的应用程序。应用程序的Wi-Fi部分工作正常,但数据部分似乎无法正常工作。我在三星手机上听说过类似的问题(我正在测试一款),我需要一个不超过API级别15的解决方案 这是我目前的代码:Android获取移动数据信号强度(API<;17),android,Android,我正在制作一个可以获取Wi-Fi和移动数据信息的应用程序。应用程序的Wi-Fi部分工作正常,但数据部分似乎无法正常工作。我在三星手机上听说过类似的问题(我正在测试一款),我需要一个不超过API级别15的解决方案 这是我目前的代码: class myPhoneStateListener extends PhoneStateListener { @Override public void onSignalStrengthsChanged(SignalStrength signalS
class myPhoneStateListener extends PhoneStateListener {
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
if (signalStrength.isGsm()) {
mobileStrength = signalStrength.getGsmSignalStrength();
mobileStrength = (2 * mobileStrength) - 113;
} else {
mobileStrength = signalStrength.getCdmaDbm();
}
}
}
但是它返回
null
您是否在AndroidManifest.xml文件中设置了权限
如果不是,则将其设置为读取手机状态
你诚挚的
Flemming您是否在AndroidManifest.xml文件中设置了权限
/**
* Gets the signal level from a <tt>SignalStrength</tt> as a value in the
* range 0-4. This info is hidden from the public API, so this method
* obtains it via reflection.
*
* @return the signal level, or 0 if Google has broken the hack
*/
public static int getSignalLevel(final SignalStrength signal) {
try {
final Method m = SignalStrength.class.getDeclaredMethod("getLevel", (Class[]) null);
m.setAccessible(true);
return (Integer) m.invoke(signal, (Object[]) null);
} catch (Exception e) {
Log.debug(TAG, "Google hates developers", e);
return 0;
}
}
如果不是,则将其设置为读取手机状态
你诚挚的
弗莱明/**
/**
* Gets the signal level from a <tt>SignalStrength</tt> as a value in the
* range 0-4. This info is hidden from the public API, so this method
* obtains it via reflection.
*
* @return the signal level, or 0 if Google has broken the hack
*/
public static int getSignalLevel(final SignalStrength signal) {
try {
final Method m = SignalStrength.class.getDeclaredMethod("getLevel", (Class[]) null);
m.setAccessible(true);
return (Integer) m.invoke(signal, (Object[]) null);
} catch (Exception e) {
Log.debug(TAG, "Google hates developers", e);
return 0;
}
}
*从SignalStrength中获取信号电平,作为
*范围0-4。此信息对公共API是隐藏的,因此此方法
*通过反射获得它。
*
*@返回信号电平,如果谷歌破解,返回0
*/
公共静态信号电平(最终信号强度信号){
试一试{
最终方法m=SignalStrength.class.getDeclaredMethod(“getLevel”,(class[])null);
m、 setAccessible(true);
返回(整数)m.invoke(信号,(对象[])null);
}捕获(例外e){
debug(标签“Google讨厌开发者”,e);
返回0;
}
}
/**
*从SignalStrength中获取信号电平,作为
*范围0-4。此信息对公共API是隐藏的,因此此方法
*通过反射获得它。
*
*@返回信号电平,如果谷歌破解,返回0
*/
公共静态信号电平(最终信号强度信号){
试一试{
最终方法m=SignalStrength.class.getDeclaredMethod(“getLevel”,(class[])null);
m、 setAccessible(true);
返回(整数)m.invoke(信号,(对象[])null);
}捕获(例外e){
debug(标签“Google讨厌开发者”,e);
返回0;
}
}
仍然返回null
。仍然返回null
。它返回4(我假设这是最好的)。有没有办法从0-100分开始?如果没有,我是否应该使用[result]*25的[result]*20
?@AngryCupcake274如果您想了解该方法如何得出一个值,请在AOSP中查找并根据您的目的进行调整。就我个人而言,我觉得默认实现中存在一定程度的“条形膨胀”。您知道一种获得移动数据速度的方法,如WifiInfo.getLinkSpeed()
?我不在乎它是什么样的网络,我只需要一个号码。(我必须在这里提问,因为我90分钟内无法发布)另外,您如何根据需要获得信号强度?我不想等到信号强度改变时再去做。@AngryCupcake274我不知道有什么办法可以在API 17之前按需获得它。当我的应用程序启动时,我注册了一个监听器,希望它在我需要它之前改变。我从未尝试过确定移动数据速度。它返回4(我认为这是最好的)。有没有办法从0-100分开始?如果没有,我是否应该使用[result]*25的[result]*20
?@AngryCupcake274如果您想了解该方法如何得出一个值,请在AOSP中查找并根据您的目的进行调整。就我个人而言,我觉得默认实现中存在一定程度的“条形膨胀”。您知道一种获得移动数据速度的方法,如WifiInfo.getLinkSpeed()
?我不在乎它是什么样的网络,我只需要一个号码。(我必须在这里提问,因为我90分钟内无法发布)另外,您如何根据需要获得信号强度?我不想等到信号强度改变时再去做。@AngryCupcake274我不知道有什么办法可以在API 17之前按需获得它。当我的应用程序启动时,我注册了一个监听器,希望它在我需要它之前改变。我从未尝试过确定移动数据的速度。