2012-11-20 7 views
0

PhoneStateListener를 사용하여 연결 상태 변경을 처리하려고합니다. 나는 서비스의 onCreate 메소드 안에 리스너를 등록했다. 전화 설정에서 wifi 연결을 사용하거나 사용하지 않도록 설정하면 수신기의 onDataConnectionStateChanged (int state) 메서드가 호출되지만 'state'매개 변수가 모두 0이고 항상 스위치의 첫 번째 사례를 입력합니다.onDataConnectionStateChanged 상태 매개 변수는 항상 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; 
      } 
     } 
    }; 

결과는 항상 말하는 토스트 메시지입니다 : 다음은 방법의 내 구현이야! "데이터 연결이 끊어". 나는 Im이 여기에 간단한 것을 놓친다라고 확신하지만, 나는 그 문제가 무엇인지 알 수 없다.

답변

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" /> 
에 권한을 추가하는 것을 잊지 마세요 경우에만 실행 있어요