android - 检测何时在 Android 中关闭漫游

标签 android broadcastreceiver roaming

我创建了一个 BroadcastReceiver 来监听 CONNECTIVITY_CHANGE 事件。现在,我只是打印出调用 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));
    }
}

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. 您没有告诉您的家庭电信公司打开网络漫游,但是当您到达其他国家/地区时,手机开始检测其他电信网络。
  2. 在场景 1 之后,您的手机会要求您选择要连接到哪个检测到的电信网络。您选择一个,电话会尝试连接。我不知道 isNetworkRoaming() 会返回什么值,因为您一开始没有订阅网络漫游。

关于android - 检测何时在 Android 中关闭漫游,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12595744/

相关文章:

java - 关于 isConnectingOrConnecting 的替代编码?

git - 如何使用本地ssh key访问第三台电脑?

c# - 我可以防止漫游存储在 PasswordVault 中的 PasswordCredential 吗?

android - 获得每个密度所需的图像大小

android - 无法解析方法'add(int, com.example.**.beatle.app.MainActivity.PlaceholderFragment)

android - 动画期间 ImageView 上的 OnTouchListener,有时不会触发/调用

值文件夹的 Android hdpi/mdpi/ldpi?

java - 无法读取 BroadcastReceiver 中的最后一条短信

java - Android - 多次调用 DownloadManager/BroadcastReceiver

ios - 使用什么 API 来检查用户是否要使用漫游电话?