Как я могу создать плагин качества сигнала в Cordova?

Я пытался использовать некоторые ответы здесь, чтобы создать плагин Cordova для качества сигнала (он может быть в дБм или на уровне 0-4), но ничего не получилось.

Те, что с PhoneStateListener, тоже не работали, так как в Cordova вам нужно создать класс такого типа:

public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
    if (action.equals("signal")){

Любая помощь будет очень признательна.

Заранее спасибо.

EDIT: я прочитал страницу разработчиков Android, связанную с этим: http://developer.android.com/reference/android/telephony/PhoneStateListener.html http://developer.android.com/reference/android/telephony/SignalStrength.html

Но мне ничего не приходило. Я очень расстраиваюсь из-за этого плагина, так как он последний, как только он будет завершен, проект тоже будет завершен.

Спасибо, MYS77

ИЗМЕНИТЬ 2

Я уже использовал эти коды:

1:

CellInfo allCellInfo = (CellInfo) tm.getAllCellInfo().get(0);
              CellSignalStrength cellSignalStrength = ((CellInfoGsm) allCellInfo).getCellSignalStrength();
              level = cellSignalStrength.getLevel();

2:

List<NeighboringCellInfo> neighbors = tm.getNeighboringCellInfo();
          for (NeighboringCellInfo n : neighbors) {
              if (n.getRssi() != NeighboringCellInfo.UNKNOWN_RSSI) {
                  dbm = n.getRssi();
              }

3:

TelephonyManager tm = (TelephonyManager)cordova.getActivity().getSystemService(Context.TELEPHONY_SERVICE);
MyPhoneStateListener MyListener;

  @Override
  public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
    boolean result = false;
    String level = "";
    if (action.equals("signal")){
        try{
            tm.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
            callbackContext.success("Hey!");
            level = MyListener.getStrength();
        }
        catch (Exception ex) {
            callbackContext.error("ERROR");
        }
        finally{
            if (level != "") {
                callbackContext.success("Signal Strength = "+level);
            }
            else{
                callbackContext.success("Could not retrieve signal quality.");
            }
        }
    }
    return result;
  }
}

class MyPhoneStateListener extends PhoneStateListener{
  String gsmStrength = "";

  @Override
  public void onSignalStrengthsChanged(SignalStrength signalStrength) {
    super.onSignalStrengthsChanged(signalStrength);
    gsmStrength = String.valueOf(signalStrength.getGsmSignalStrength()* 2 - 113);           
}
public String getStrength() {
    return gsmStrength;
}

Они не выдают никаких ошибок, но когда я тестирую свой Xperia M2 Aqua, он продолжает отправлять «Недопустимое действие» в качестве ответа.


person Matheus Shita    schedule 05.01.2015    source источник
comment
Нет способа сделать это? Мне очень нужна помощь...   -  person Matheus Shita    schedule 07.01.2015


Ответы (1)


Неважно, так как никто не помогает... Я нашел способ сделать это в сети GSM:

EDIT 2: мои предыдущие ответы удалены, так как этот код работает как для устройств Samsung, так и для устройств других производителей.

public string signalStrength(){
 TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
   int dBmlevel = 0;
   int asulevel = 0;
   String res = "";
            try {
                List<CellInfo> cellInfoList = tm.getAllCellInfo();
                //Checking if list values are not null
                if (cellInfoList != null) {
                    for (final CellInfo info : cellInfoList) {
                        if (info instanceof CellInfoGsm) {
                            //GSM Network
                            CellSignalStrengthGsm cellSignalStrength = ((CellInfoGsm)info).getCellSignalStrength();
                            dBmlevel = cellSignalStrength.getDbm();
                            asulevel = cellSignalStrength.getAsuLevel();
                        }
                        else if (info instanceof CellInfoCdma) {
                            //CDMA Network
                            CellSignalStrengthCdma cellSignalStrength = ((CellInfoCdma)info).getCellSignalStrength();
                            dBmlevel = cellSignalStrength.getDbm();
                            asulevel = cellSignalStrength.getAsuLevel();
                        }
                        else if (info instanceof CellInfoLte) {
                            //LTE Network
                            CellSignalStrengthLte cellSignalStrength = ((CellInfoLte)info).getCellSignalStrength();
                            dBmlevel = cellSignalStrength.getDbm();
                            asulevel = cellSignalStrength.getAsuLevel();
                        }
                        else if  (info instanceof CellInfoWcdma) {
                            //WCDMA Network
                            CellSignalStrengthWcdma cellSignalStrength = ((CellInfoWcdma)info).getCellSignalStrength();
                            dBmlevel = cellSignalStrength.getDbm();
                            asulevel = cellSignalStrength.getAsuLevel();
                        }
                        else{
                            res = "Unknown type of cell signal.";
                        }
                    }
                }
                else{
                    //Mostly for Samsung devices, after checking if the list is indeed empty.
                    MyListener = new MyPhoneStateListener();
                    tm.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
                    int cc = 0;
                    while ( signalLevel == -1){
                        Thread.sleep(200);
                        if (cc++ >= 5)
                        {
                            break;
                        }
                    }
                    asulevel = signalLevel;
                    dBmlevel = -113 + 2 * asulevel;
                    tm.listen(MyListener, PhoneStateListener.LISTEN_NONE);
                    signalLevel = -1;
                }
                result = true;
            }
            catch (Exception ex){
                res = "Failed to retrieve signal strength";
            }
            finally{
                res = "Signal strength: " + dBmlevel + " dBm, "+ asulevel + " asu";
            }
     return res;
  }
person Matheus Shita    schedule 07.01.2015