【问题标题】:Getting signal strength without an activity无需活动即可获得信号强度
【发布时间】:2011-02-07 11:21:09
【问题描述】:

作为内联工作的一部分,我需要获取信号强度。我的应用没有活动,没有服务和广播接收器。因此,在生命周期中,我的代码仅在广播意图(用于电话呼叫状态)运行时运行。

我的问题是我可以挂起一个 PhoneStateListener,它可以让我在我要求时(或不久之后)收到有关信号强度的事件。

GSM 信号强度不是作为可广播事件传递的吗?

(我试图避免将此侦听器放入服务中)

谢谢。

【问题讨论】:

  • 我也想知道这个问题的答案,如何通过轮询访问 SignalStrength 类,而不是在发生变化时通过侦听器访问。

标签: android


【解决方案1】:

我的问题是我可以挂起一个PhoneStateListener,它可以让我在我要求它时(或不久之后)接收有关信号强度的事件。

您无法从清单注册的BroadcastReceiver 设置任何类型的侦听器。

GSM 信号强度不是作为可广播事件传递的吗?

据我所知没有。

(我试图避免将此侦听器放入服务中)

这是一个令人钦佩的目标。您确定需要信号强度吗?

【讨论】:

  • 这是值得商榷的 :-) 我有一个“应用程序”,它将拦截拨出呼叫意图、“中止”呼叫、向主机发送 Web 服务或 SMS 请求,该主机将有效地回调手机,呼叫前转目的地并连接两端。如果应用程序所在的手机的信号强度很低(或没有),我什至不想尝试整个过程。还有什么能告诉我一些近似于手机接听电话的信号强度/价值的东西吗?谢谢。
  • @SCG:“如果应用程序所在的手机信号强度低(或没有),我什至不想尝试整个过程。” -- 如果它是“none”,你一开始就不会有来电。不过,我对“低”没有任何建议。我的假设是当前的 API 是为主屏幕之类的东西设计的,而不是你的情况。
  • 虽然您是对的,但用户获得的体验是:a) 通过 wifi 等拨打转换为 W/S 呼叫的呼叫,这“有效”,b) 永远不会被回叫到没有 GSM 信号强度,c) 被叫方听到来电者的接听电话!!!! (因为原始电话的来电被运营商拦截,运营商将其分流到移动语音信箱)。希望这是有道理的。
【解决方案2】:

由于您正在拦截拨出电话,您可以根据需要使用android.telephony.SignalStrength 来决定是否继续,而不是寻找信号强度广播。

【讨论】:

  • 嗨。听起来不错,但我如何直接从电话管理器访问它?我能找到的唯一可以给我信号强度的想法需要我设置一个我认为我不能使用的监听器,因为我没有活动或服务来挂断它。
  • @SCG 显然,onSignalStrengthsChanged 回调是PhoneStateListener 的一部分,它将提供一个 SignalStrength 对象供您查询。
  • 但这就是问题所在——为了设置监听器并使其保持活动状态,它必须挂起具有“生命周期”的东西,比如活动或服务。我试图避免创建任何一个。
猜你喜欢
  • 2011-04-22
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2016-01-03
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多