0

接続状態の変更を処理するために PhoneStateListener を使用しようとしています。サービスの onCreate メソッド内にリスナーを登録しました。電話の設定からwifi接続を有効または無効にすると、リスナーのオーバーライドされたメソッドonDataConnectionStateChanged(int state)が呼び出されますが、どちらの場合も「状態」パラメーターは0で、常にスイッチの最初のケースに入ります。メソッドの実装は次のとおりです。

PhoneStateListener listener = new PhoneStateListener() { 
        @Override
        public void onDataConnectionStateChanged(int state) {
            super.onDataConnectionStateChanged(state);
            switch (state) {
                case TelephonyManager.DATA_DISCONNECTED:
                    Toast.makeText(LocationService.this, "Data connection lost!", Toast.LENGTH_LONG).show();
                    break;
                case TelephonyManager.DATA_CONNECTED:
                    Toast.makeText(LocationService.this, "Data connection available!", Toast.LENGTH_LONG).show();
                    break;
            }
        }
    };

結果は常に、「データ接続が失われました!」というトースト メッセージです。ここで単純なものが欠けていると確信していますが、何が問題なのかわかりません。

4

1 に答える 1

1

古い質問ですが、表示するコードは「データ」用であり、Wifi 用ではありません。私は同じコードを持っていて、「LTE」(データ)に接続したときにのみ実行されます

private void registerDataListener(Context context) {

    listener = new PhoneStateListener() {
        @Override
        public void onDataConnectionStateChanged(int state) {
            switch (state) {
            case TelephonyManager.DATA_DISCONNECTED:
                Log.d(TAG, "Disconnected");
                break;
            case TelephonyManager.DATA_CONNECTED:
                Log.d(TAG, "Connected");
                break;
            case TelephonyManager.DATA_CONNECTING:
                Log.d(TAG, "Connecting");
                break;
            case TelephonyManager.DATA_SUSPENDED:
                Log.d(TAG, "Disconnecting");
                break;
            }
        }

    };
    telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    telephonyManager.listen(listener,PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
    Log.d(TAG, "Registering PhoneStateListener");

}

マニフェストに許可を追加することを忘れないでください

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
于 2013-01-05T02:42:27.790 に答える