我需要检测GSM手机刚刚连接到网络的时间(从无法连接到手机信号塔的手机信号塔)。为此我设置广播接收器 AIRPLANE_MODE (关闭)和 BOOT_COMPLETE ,当这两个被解雇时,我会循环一段时间,直到检测到网络。但除此之外,手机可能位于
的位置Cell Tower根本不可用
我怎样才能发现这种情况?
答案 0 :(得分: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;
如果检查为真,则表示没有网络连接,因此接收器退出。下次连接发生变化时,接收器再次激活并再次运行此检查。一旦通过检查,我就会继续做我做的任何事情。
答案 1 :(得分:0)
CONNECTIVITY_CHANGE似乎适用于飞行模式的模拟器,但在我的设备上它只针对3G网络状态更改而触发。现在我不得不接受SERVICE_STATE_CHANGE,因为在飞机模式和突然失去塔架之间切换而被解雇。对于重启,我使用了BOOT_COMPLETED。