2013-04-07 5 views

답변

3

Android : "휴대 전화 없음"SIM 카드 모드를 감지하는 방법?

PhoneStateListener 클래스는 이러한 목적으로 설계되었습니다. 그것을 사용할 때 현재 공급자에게 바운드 된 GSM 신호가 바뀔 때 콜백을받을 수 있습니다.

매니페스트 파일에 다음과 같은 android.intent.action.PHONE_STATE 세트가 있어야합니다.

다음, 당신은 당신의 PhoneStateListener 그것에 TelephonyManager를 호출하고 결합해야합니다 :

TelephonyManager telManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
telManager.listen(this.phoneListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 

당신은 구현할 수 있습니다 PhoneStateListener 같은 : GSM 신호 강도 값에 정의되어

private final PhoneStateListener phoneListener = new PhoneStateListener() { 

    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     Log.d("onSignalStrengthsChanged", "The new singal strength is " 
       + signalStrength.getGsmSignalStrength()); 
    } 

}; 

TS 27.007 8.5. 기본적으로 0의 값은 이고, 낮은 값인이며, 값 31은 으로 양호한이며, 값 99는 을 알 수 없거나 감지 할 수 없음을 의미합니다.입니다. 유효한 값은 Android Developers manual에 명시된대로 (0-31, 99)입니다.

위의 내용은 GSM 신호를 다루므로 GSM 신호에만 관심이 있다면 이전 예제를 사용하십시오. 당신이 데이터 네트워크는 신호 강도의 부족으로 인해 가능 여부 진술에 관심이있을 경우에는 사용 가능한 모든 데이터 네트워크에 대한 다른 신호 값을 얻을 수 있습니다 :

TelephonyManager.getNetworkType() 메서드를 호출하면 현재 데이터 네트워크의 유형을 알 수 있습니다.

이중 SIM 장치는 어떻습니까?

잘 모르겠다. 그러나 위의 내용이 다중 SIM 장치에 적용되지 않는 이유는 알 수 없습니다. 그것은 그렇게 작동해야합니다.

+0

감사합니다. 실제로 "OUT_OF_SERVICE"인 "1"을 기다리는 onServiceStateChanged를 확인해야합니다. 최저 신호가 더 정확한 상태입니까? 사용하지 마십시오 ... – peacemakerv

+0

물론 onServiceStateChanged에서 'STATE_OUT_OF_SERVICE' 이벤트를 볼 수 있습니다. onSignalStrengthsChanged는 신호의 상태를보다 자세하게 알 수있는 기회를 제공 할 수 있습니다. 이를 통해 신호 강도가 응용 프로그램에서 받아 들여 지거나 받아 들여지지 않는 수준을 정의 할 수 있습니다. –

+0

감사합니다. 모두 명확합니다! – peacemakerv