在Android中检测漫游时间是否已关闭

时间:2012-09-26 06:27:08

标签: android broadcastreceiver roaming

我创建了一个BroadcastReceiver来监听CONNECTIVITY_CHANGE事件。现在,我只打印出调用Intent及其附加内容的BroadcastReceiver的操作。我在马尼拉的办公室里使用的是测试电话,SIM卡来自丹麦。调用onReceive()时,这是在LogCat中打印出来的内容:

action: android.net.conn.CONNECTIVITY_CHANGE
key: extraInfo, value: data.tre.dk
key: htcCurrentActiveNetwork, value: null
key: networkInfo, value: null
key: reason, value: roamingOn
key: noConnectivity, value: null
key: inetCondition, value: null

我需要知道漫游消失时reason的价值是什么 - 猜测可能是roamingOff,但除非我去丹麦,否则我无法确定。这是因为我需要在漫游服务关闭时执行任务,并且我从LogCat注意到CONNECTIVITY_CHANGE事件由于切换漫游模式以外的原因而被触发。或者有更好的方法来检测何时关闭漫游?

广播接收器的代码:

public void onReceive(Context context, Intent intent) {
    Log.d(This.LOGTAG, "action: " + intent.getAction());
    Bundle extras = intent.getExtras();
    for (String key : extras.keySet()) {
        Log.d(This.LOGTAG, "key: " + key + ", value: " + extras.getString(key));
    }
}

清单条目:

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

2 个答案:

答案 0 :(得分:1)

网络漫游和数据漫游之间存在差异。

通常,当您在国外时,网络漫游允许您的电信公司通过第三方卫星,以便您可以保持与其服务的连接。即使你已经告诉你的电信公司你想要订购网络漫游,它也不会被激活,直到你真正开始通过第三方电信卫星连接,而这只有在你真正离开这个国家时才会发生。

当您处于网络漫游模式时,数据漫游只是允许/禁止您的设备使用移动数据。它更依赖于设备,您可以在手机的“设置”应用中轻松打开或关闭它。

简而言之,如果要检测网络漫游,请使用TelephonyManager.isNetworkRoaming()。如果要检查数据漫游是打开还是关闭,请使用Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING)

重要提示:我没有亲自测试过以下情况,但我不确定isNetworkRoaming()会返回什么值。

  1. 您没有告诉您的家庭电信公司打开网络漫游,但当您到达其他国家时,手机开始检测其他电信网络。
  2. 在方案1之后,您的手机会要求您选择要连接的检测到的电信网络中的哪一个。您选择一个,手机尝试连接。我不知道isNetworkRoaming()会返回什么值因为您没有首先订阅网络漫游。

答案 1 :(得分:0)

您可以简单地使用此行来检测漫游状态:

Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING)

这不需要任何特殊权限或接收者。

Source