2012-09-26 6 views
8

CONNECTIVITY_CHANGEイベントをリッスンするBroadcastReceiverを作成しました。今のところ、BroadcastReceiverとその付属品を呼び出すIntentの動作を単に印刷します。マニラの私たちのオフィスではテスト用の電話を使用していますが、SIMカードはデンマークからのものです。 onReceive()が呼び出されるとき、これはLogCatでプリントアウトする内容である:ローミングがAndroidでオフになったときの検出

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)); 
    } 
} 

マニフェストエントリ:

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

この:あなたは、単にローミング状態を検出するために、このラインを使用することができます

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

答えて

1

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

通常、ネットワークローミングにより、外出中に通信事業者がサードパーティの衛星を経由してサービスに接続できるようになります。ネットワークローミングに加入したいと電話会社にすでに伝えていたとしても、実際にサードパーティの通信衛星を介して接続を開始するまでは有効にならず、実際に国外にいるときにのみ発生します。

データローミングは、ネットワークローミングモードに入っている間にデバイスがモバイルデータを消費することを単に許可/禁止しています。よりデバイスに依存しており、携帯電話の設定アプリで簡単にオン/オフを切り替えることができます。

つまり、ネットワークローミングを検出する場合は、TelephonyManager.isNetworkRoaming()を使用します。データローミングのオン/オフを確認する場合は、Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING)を使用してください。

重要:私は次のシナリオを個人的にテストしていません。isNetworkRoaming()が返却する値がわかりません。

  1. あなたは自宅の電話会社にネットワークローミングを設定するように指示していませんでしたが、他の国に着信したときに電話機が他の電話会社のネットワークを検出し始めました。
  2. シナリオ1の後、検出された通信ネットワークのどれを接続するかを選択するように求められます。 1つを選択すると、電話機は接続を試みます。最初にネットワークローミングを購読していなかったので、値isNetworkRoaming()がここに返されるのはわかりません。
0

Doe特別なパーミッションやレシーバは必要ありません。

Source

+0

私は、 'TelephonyManager.isNetworkRoaming()'の結果と共にその行の結果を記録しました。'Settings.Secure.DATA_ROAMING'は' isNetworkRoaming() 'が' true'である間に '0'(データローミングがオフであることを意味する)を返します。これは、通信会社がまだネットワークローミングモードになっているためですが、携帯端末でモバイルインターネットを使用できないためです。彼らは異なるスイッチのように見え、私はネットワークローミングモードの後です。 –

+0

あなたは何を知りたいですか?私は 'TelephonyManager.isNetworkRoaming()'があなたがローミング中であることを示し、ローミング中にインターネットを使用できるかどうかを表示すると設定します。 – Jin35

+0

私はネットワークのローミングモードの後に​​います。データローミングを介して送受信されるモバイルデータの量だけでなく、 –

関連する問題