我创建了一个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的值(value)-通过猜测可以是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));
    }
}

list 输入:
<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()将返回什么值,因为您首先没有订阅网络漫游。
  • 关于android - 在Android中检测何时关闭漫游,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12595744/

    10-10 18:32