9

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>
4

2 に答える 2

1

ネットワーク ローミングとデータ ローミングには違いがあります。

一般に、ネットワーク ローミングは、ユーザーが国外にいる間、通信会社がサード パーティの衛星を通過できるようにすることで、サード パーティのサービスに接続したままにすることができます。ネットワーク ローミングに加入したい旨を電話会社に伝えていたとしても、実際にサードパーティの電話会社の衛星経由で接続を開始するまでアクティブ化されません。

データ ローミングとは、ネットワーク ローミング モード時にデバイスがモバイル データを消費することを許可または禁止することです。よりデバイスに依存し、電話の設定アプリで簡単にオンまたはオフにできます.

つまり、ネットワーク ローミングを検出する場合は、TelephonyManager.isNetworkRoaming(). データ ローミングがオンかオフかを確認するには、 を使用しますSettings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING)

重要: 私は次のシナリオを個人的にテストしていないため、どのような値isNetworkRoaming()が返されるかわかりません。

  1. 自宅の電話会社にネットワーク ローミングをオンにするように指示していませんでしたが、別の国に到着すると、電話は他の電話会社のネットワークを検出し始めました。
  2. シナリオ 1 の後、電話機は、検出された電話会社ネットワークのどれに接続するかを選択するよう求めます。いずれかを選択すると、電話が接続を試みます。isNetworkRoaming()そもそもネットワーク ローミングに加入していないため、ここで返される値はわかりません。
于 2012-10-04T05:28:33.190 に答える
0

ローミング状態を検出するには、次の行を使用するだけです。

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

これには、特別な権限や受信者は必要ありません。

ソース

于 2012-09-26T06:43:14.030 に答える