我创建了一个侦听CONNECTIVITY_CHANGE
事件的BroadcastReceiver
。现在,我只打印出调用BroadcastReceiver
及其附加组件的Intent
的操作。我在马尼拉的办公室使用测试手机,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>
网络漫游和数据漫游之间有区别。
一般来说,网络漫游允许您的电信公司在您出国时通过第三方卫星,这样您就可以与他们的服务保持联系。即使你已经告诉你的电信公司你想订阅网络漫游,在你真正开始通过第三方电信公司卫星连接之前,它也不会被激活,只有当你真正离开这个国家时才会被激活。
数据漫游只是允许/禁止您的设备在网络漫游模式下使用移动数据。它更依赖于设备,你可以在手机的"设置"应用程序中轻松打开或关闭它。
简而言之,如果要检测网络漫游,请使用TelephonyManager.isNetworkRoaming()
。如果要检查数据漫游是打开还是关闭,请使用Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING)
。
重要提示:我还没有亲自测试过以下场景,我不确定isNetworkRoaming()
会返回什么值。
- 你没有告诉家里的电信公司打开网络漫游,但当你到达其他国家时,手机开始检测其他电信公司的网络
- 在场景1之后,您的手机会要求您选择要连接到检测到的电信公司网络中的哪一个。您选择一个,手机就会尝试连接。我不知道
isNetworkRoaming()
在这里会返回什么值,因为你一开始没有订阅网络漫游
您可以简单地使用此行来检测漫游状态:
Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING)
这不需要任何特殊权限或接收者。
源