首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SignalStrength - getSignalStrength() - getLevel()

SignalStrength - getSignalStrength() - getLevel()
EN

Stack Overflow用户
提问于 2018-02-10 01:28:30
回答 1查看 1.5K关注 0票数 3

我可以通过回调轻松获取Android中的sigalStrength

代码语言:javascript
运行
复制
 onSignalStrengthsChanged(SignalStrength signalStrength)

并通过传递的对象检索signalStrength

代码语言:javascript
运行
复制
int signal_strength = signalStrength.getGsmSignalStrength();

根据文档,该值在0到39.99之间变化

现在,我想在我的应用程序中将其显示在一个指示器中,该指示器会随着signalStrenght的变化而更新--这与你在手机的状态栏中看到的完全相同。

所以我的问题是--我如何使用这个变量呢?如果它是线性的,那么使用1- 10,11 - 20等区间是很容易的,但我猜这并不容易?

我知道我可以通过调用来标准化这个值。

代码语言:javascript
运行
复制
 int level = signalStrength.getLevel()

这是通过调用getLevel,然后我得到一个介于0- 4之间的值,就像RSSI对WIFI所做的那样。但问题是,它需要API23,这意味着我只能覆盖大约40%的android市场。

所以-如果我不想使用getLevel,我怎么能相应地使用getGsmSignalStrength()呢?

代码语言:javascript
运行
复制
  @Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
    super.onSignalStrengthsChanged(signalStrength);

    int signal_strength = signalStrength.getGsmSignalStrength();

    //int level = signalStrength.getLevel(); //api 23

    Toast.makeText(context, "signalStrength: " + signal_strength, Toast.LENGTH_SHORT).show();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 22:29:37

在你的onSignalStrengthsChanged中尝试下面的代码片段。我是使用反射实现的。它适用于所有类型的网络类。希望能有所帮助。

代码语言:javascript
运行
复制
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
    super.onSignalStrengthsChanged(signalStrength);

    int level = 0;
    try {
        final Method m = SignalStrength.class.getDeclaredMethod("getLevel", (Class[]) null);
        m.setAccessible(true);
        level = (Integer) m.invoke(signalStrength, (Object[]) null);
    } catch (Exception e) {
        e.printStackTrace();
    }          
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48711159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档