package com.num.tasks; import java.util.ArrayList; import java.util.Map; import org.json.JSONObject; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.telephony.PhoneStateListener; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; import com.num.Values; import com.num.helpers.DeviceHelper; import com.num.helpers.LooperThread; import com.num.helpers.PingHelper; import com.num.listeners.ResponseListener; import com.num.models.ClientLog; import com.num.utils.SignalUtil; import com.num.utils.SignalUtil.SignalResult; /* * Measurement Task * set tasks to run and give ip address to ping and more * * Call another task to backend * * */ public class SignalStrengthTask extends ServerTask { boolean signalRunning = true; String signalValue = ""; public SignalStrengthTask(Context context, Map<String, String> reqParams, ResponseListener listener) { super(context, reqParams, listener); } @Override public void runTask() { final TelephonyManager manager = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE); LooperThread thread = new LooperThread(new Runnable() { public void run() { MyPhoneStateListener listener = new MyPhoneStateListener(manager); listener.listen(); } }); thread.start(); try { thread.join(); } catch (InterruptedException e) { ClientLog.log(getContext(), e, toString()); } while(signalRunning) { try { Thread.sleep(Values.NORMAL_SLEEP_TIME); } catch (InterruptedException e) { ClientLog.log(getContext(), e, toString()); } } System.out.println("signalValue: " + signalValue); getResponseListener().onCompleteSignal(signalValue); } @Override public String toString() { return "SignalStrength Task"; } private class MyPhoneStateListener extends PhoneStateListener { private TelephonyManager manager; public MyPhoneStateListener(TelephonyManager manager) { this.manager = manager; } @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { super.onSignalStrengthsChanged(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"; } } signalValue = strength; signalRunning=false; manager.listen(this, PhoneStateListener.LISTEN_NONE); Looper.myLooper().quit(); } public void listen() { manager.listen(MyPhoneStateListener.this, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); } } }