0

ここでいくつかの回答を使用して、信号品質用の Cordova プラグインを作成しようとしましたが (dBm または 0-4 レベルにすることができます)、何も機能しませんでした。

Cordova では、このタイプのクラスを作成する必要があるため、PhoneStateListener を持つものも同様に機能しませんでした。

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 でテストすると、応答として「無効なアクション」が送信され続けます。

4

1 に答える 1

0

誰も助けていないので、もう一度気にしないでください... GSMネットワークでこれを行う方法を見つけました:

EDIT 2 : このコードは Samsung デバイスと 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;
  }
于 2015-01-07T18:00:08.423 に答える