package com.num.utils; import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; public class SignalUtil { private static TelephonyManager telephonyManager; private static MyPhoneStateListener phoneStateListener; private static int signalStrength; private static Context context; public static SignalResult signalResult; public static void getSignal(SignalResult signalR, Context ct) { signalResult = signalR; context = ct; phoneStateListener = new MyPhoneStateListener(); signalStrength = -1; telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); if(telephonyManager != null && phoneStateListener != null) { telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); } telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTH); } private static TelephonyManager getTelephoneManager(){ if(telephonyManager == null) telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); return telephonyManager; } private static class MyPhoneStateListener extends PhoneStateListener{ public void onSignalStrengthsChanged (SignalStrength signalStrength) { String strength = "-1"; if (signalStrength != null) { if (signalStrength.isGsm()) { strength = "" + signalStrength.getGsmSignalStrength(); } if (signalStrength.getCdmaDbm() > 0) { strength = signalStrength.getCdmaDbm() + "dBm "; strength += signalStrength.getCdmaEcio() + "Ec/lo"; } else if (signalStrength.getEvdoDbm() > 0) { strength = signalStrength.getEvdoDbm() + "dBm "; strength += signalStrength.getEvdoEcio() + "Ec/lo "; strength += signalStrength.getEvdoSnr() + "snr"; } getTelephoneManager().listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); //responseListener.onCompleteSignal(strength); signalResult.gotSignal(strength); } else { //responseListener.onCompleteSignal(strength); signalResult.gotSignal(strength); } telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); } public void onSignalStrengthChanged(int asu) { try { signalStrength = asu; getTelephoneManager().listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); //responseListener.onCompleteSignal("" + signalStrength); signalResult.gotSignal("" + signalStrength); telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); } catch (Exception e) { e.printStackTrace(); } } }; public static abstract class SignalResult { public abstract void gotSignal(String signal); } }