Как я могу создать плагин качества сигнала в Cordova?
Я попытался использовать некоторые ответы здесь, чтобы создать плагин Cordova для качества сигнала (он может быть на уровне дБм или 0-4), но ничего не получалось.
Те, у кого PhoneStateListener не работает, так как в Cordova вам нужно создать класс такого типа:
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException { if (action.equals("signal")){
Любая помощь будет очень ценится.
Заранее спасибо.
РЕДАКТИРОВАТЬ: Я прочитал страницу разработчиков 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, он продолжает посылать "Недопустимое действие" в качестве ответа.
1 ответ
Не берите в голову снова, поскольку никто не помогает... Я нашел способ сделать это в сети GSM:
РЕДАКТИРОВАТЬ 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; }