2013-01-09 61 views
1

让我总结一下我的问题以及我想实现的目标。Android的请求GSM/UMTS位置更新

我有一个Android 2.3.3的索尼爱立信X10i手机。我意识到有时我的手机没有收到来电,即使它表示全部覆盖。我在MSC/VLR中检查了自己,它表明我注册了,并且我的手机当前处于活动状态(并且没有IMSI DETACH标志),所以它应该正常工作(只有最后一个激活日期有点旧了〜小时,这可以很好,没有短信/电话/位置更新),正如我之前提到的手机显示全面覆盖,它似乎在网络上。但是当我试图打电话时,我只能到达语音信箱。 在MSC/VLR中,我看到呼叫没有寻呼响应原因,但是电话什么都不做。我尝试过使用其他SW版本(4.0.3 ICS),但结果相同。但我没有注意到与不同手机(相同类型)的类似行为。 对不起长篇摘要。我试图写一个应用程序/服务,将在15-20分钟内执行GSM/UMTS位置更新,但我找不到android.telephony.gsm.GsmCellLocation,android.telephony.TelephonyManager中的任何一种程序,其中将为我做这个。
我的其他问题是从ServiceState类的 getState()/setStateOutOfService()/ setState()程序... 看来他们并没有真正的工作。例如,当我第一次调用的getState()我总是回来STATE_OUT_OF_SERVICE,这是不正确的...... 当我的状态设置为STATE_POWER_OFFSTATE_IN_SERVICE,至少我回来从getState()那个状态事后,但电话没有为此做任何事。 (甚至不包括覆盖范围内,等等......)

欢迎每一个建议/评论。

+0

它听起来像一个有趣的问题,但你做了一堆不同的评论,我不能完全理解你想要什么知道。据我了解,你想要根据手机塔台三角定位手机的位置(纬度,经度),是吗?如果是这样,您必须通过LOCATION_PROVIDER进行操作并请求NETWORK_PROVIDER。如果这不是你要求的,我建议你澄清一下你的问题。 – Budius

+0

您好,基本上,我想强制我的手机执行新的位置更新到无线电/核心。这与纬度,经度无关)是纯粹的GSM/UMTS移动管理信令。 [链接](http://en.wikipedia.org/wiki/Mobility_management)。我希望澄清一下,如果不是,请让我知道。 – zmiricz

+0

我想现在更清楚了,但不幸的是我无法提供帮助。祝你好运。 – Budius

回答

0

我也多次看到这个问题(2个来自同一制造商的手机)。从你的问题,我知道你想强制手机发送一个MM定期位置更新(它应该发送)。

这个级别太低,无法在编程界面直接强制执行此操作。移动性管理程序是电话栈的一部分,在3GPP TS 24.008中有详细说明,可从www.3gpp.org获得。段落4.2.2定义了电话应该发送这些位置更新的时间。

唯一的其他事情就是尝试通过间接方式强制手机进入发送位置更新的状态。您可以通过尝试手动选择另一个网络来完成此操作。如果成功,然后您手动重新选择您的家庭网络,那么您将触发位置更新。如果它被拒绝并回退到其家庭网络,那么我认为也会触发位置更新。 但是,这也会有很小的成本 - 电池使用时,它会进行网络扫描,并且在扫描和手动选择网络时会浪费时间。 (我个人的经验是,失去的电话并不足以证明这一点)

+0

嗨,非常感谢您的回答,这就是我所害怕的......我无法强制手机执行位置更新。至少你现在证实了它。关于解决方法,嗯,我的第二个想法是把手机置于离线状态,然后重新上网,就像飞行模式一样,但我只是想到手机对核心没有任何影响......(在这种情况下根本没有任何信息,可能不会应答寻呼/呼叫/短信)。可悲的是,这个问题更重要一点,因为它几乎是所有的时间,当我在办公室时 – zmiricz

+0

如果发生紧急情况(我的家人发生了一些事情,同事试图联系我,等等......)我甚至都没有知道我有一个电话.. 我刚刚从朋友那里得到一个提示,也许我会尝试将新的基带固件刷新到与网络兼容的手机。 (我会试一试)。 我在考虑另一种解决方法,这可能比重新选择网络更好,应用程序启动一个新的调用(也许我会打电话给我自己:)由于不可达性问题,第一次调用尝试很可能会被放弃,但之后,手机将重新上线。 – zmiricz

+0

顺便说一句,你知道为什么serviceState.getState()会在我第一次调用它时总是返回STATE_OUT_OF_SERVICE吗?并强迫电话下线:)并且它不是飞行模式? – zmiricz