0

我需要检测 GSM 手机何时刚刚连接到网络(从不可用的手机信号塔到已连接的手机信号塔)。为此,我设置了广播接收器 AIRPLANE_MODE(关闭)和BOOT_COMPLETE,当这两个被触发时,我将循环一段时间,直到检测到网络。但除此之外,手机可能位于

手机信号塔根本不可用

我怎样才能发现这种情况?

4

2 回答 2

2

您可以使用为“android.net.conn.CONNECTIVITY_CHANGE”设置意图过滤器的 BroadcastReceiver

<receiver android:name=".ConnectivityActionReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

在该接收器中,您可以查看意图的附加内容,以确定您是否有连接。我这样做如下:

@Override
public void onReceive( Context context, Intent intent )
{
    Intent startIntent;
    SharedPreferences prefs;
    String action;
    int updateType;

    action = intent.getAction();
    if ( !action.equals( ConnectivityManager.CONNECTIVITY_ACTION ) )
        return;

    /* If we don't have a connection, nothing to do */
    if ( intent.getBooleanExtra( ConnectivityManager.EXTRA_NO_CONNECTIVITY, false ) )
        return;

如果第二个 if 检查为真,则意味着没有网络连接,因此接收器退出。下次发生连接更改时,接收器将再次激活并再次运行此检查。一旦它通过了检查,我就会继续做我所做的一切。

于 2012-11-25T03:30:51.400 回答
0

CONNECTIVITY_CHANGE 似乎适用于飞行模式的模拟器,但在我的设备上它只触发 3G 网络状态更改。现在我不得不接受SERVICE_STATE_CHANGE,它会因为在飞行模式和突然失去塔台之间切换而被解雇。对于重新启动,我使用了 BOOT_COMPLETED。

于 2012-11-26T15:23:14.637 回答