1

私は現在、プロジェクト ビューアー アプリケーション パラメーター 2G および 3G に取り組んでいます。
rxqual と rx レベルを表示したいのですが、ネットワークが 3G ネットワークで検出された場合、Rx レベル rxQual は Ec/N0 と RSSI に変わりますが、問題が発生
getnetworktype ()networktype = getNetworkTypeString (tm.getNetworkType () ); ました。ネットワークタイプに対応する組織が得られたので、RxQual と RxLev は Ec/N0 と RSSI に変わりません。何か不足していたり​​間違っていたりする場合は、私のコードを確認してください..
これは私のコードです:

 public class MainActivity extends Activity 
{
    //private static final Logger logger = LoggerFactory.getLogger;
    protected String APP_NAME;
    LogWriter lw;
    PhoneStateListener myPhoneStateListener;
    int cid, lac, mcc, mnc,kuatlevel,kualitas,kw3g;
    String operator, networktype, networkOperator, type, cellinfo;

    GsmCellLocation location;
    TelephonyManager tm;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     

        //((Object) PropertyConfigurator.getConfigurator(this)).configure();

        tm = (TelephonyManager)getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); 
        tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CELL_LOCATION
                |PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

        location =((GsmCellLocation)tm.getCellLocation());
        operator = tm.getNetworkOperatorName();
        networkOperator = tm.getNetworkOperator();
        if (networkOperator !=null && networkOperator.length() > 0){
            try {
                mcc = Integer.parseInt(networkOperator.substring(0, 3));
                mnc = Integer.parseInt(networkOperator.substring(3));
            } catch (NumberFormatException e){`enter code here`
            }
        }


        networktype = getNetworkTypeString(tm.getNetworkType());
        List<NeighboringCellInfo> cellinfo = tm.getNeighboringCellInfo();
        if (null != cellinfo){
            for(NeighboringCellInfo info : cellinfo){
                ((TextView)findViewById(R.id.neighbor)).setText("CID:"+(info.getCid()& 0xffff) +
                        " LAC:"+(info.getLac()& 0xffff));
            }
        }


        ((TextView)findViewById(R.id.mnc)).setText("MNC: " + mnc);
        ((TextView)findViewById(R.id.mcc)).setText("MCC: " + mcc);
        ((TextView)findViewById(R.id.operatorname)).setText("Operator: " + operator);
        //((TextView)findViewById(R.id.networkType)).setText("Network Type: " + networktype);
    }


        private final PhoneStateListener phoneStateListener = new PhoneStateListener()
        {
            public void onCellLocationChanged(CellLocation location) {
                GsmCellLocation gsmLocation = (GsmCellLocation)location;            
                setTextViewText(R.id.lac,String.valueOf("LAC: " + (gsmLocation.getLac()& 0xffff)));
                setTextViewText(R.id.cid,String.valueOf("CID: " + (gsmLocation.getCid()& 0xffff)));
                setTextViewText(R.id.networkType,String.valueOf("Network Type: " + (networktype)));

            }

            public void onSignalStrengthsChanged(SignalStrength signalStrength){                                
                kualitas = signalStrength.getGsmBitErrorRate();
                kw3g = -1 * (signalStrength.getGsmBitErrorRate());
                kuatlevel = -113 + 2 *(signalStrength.getGsmSignalStrength());

                if (networktype == "2G"){
                    setTextViewText(R.id.rxq_ecno,String.valueOf("RxQ: " + (kualitas)));
                    setTextViewText(R.id.rxl_rssi,String.valueOf("RxL: " +  (kuatlevel) + " dBm"));
                } else {
                    setTextViewText(R.id.rxq_ecno,String.valueOf("EcNo: " + (kw3g) + " dB"));
                    setTextViewText(R.id.rxl_rssi,String.valueOf("RSSI: " +  (kuatlevel) + " dBm"));
                    setTextViewText(R.id.arfcn_rscp,String.valueOf("RSCP: " +  (kuatlevel + kw3g) + " dBm"));
                }


            }
        };


        private String getNetworkTypeString(int Ntype) {
            type = "unknown";
            switch (Ntype) {
            case TelephonyManager.NETWORK_TYPE_EDGE:type = "2G"; break;
            case TelephonyManager.NETWORK_TYPE_GPRS:type = "2G"; break;
            case TelephonyManager.NETWORK_TYPE_UMTS:type = "3G"; break;
            case TelephonyManager.NETWORK_TYPE_1xRTT:type = "2G"; break;
            case TelephonyManager.NETWORK_TYPE_HSDPA:type = "3G"; break;
            default:
            type = "unknown"; break;
            }
        // TODO Auto-generated method stub
        return type;
        }

        protected void setTextViewText(int id, String text) {
        ((TextView)findViewById(id)).setText(text);
        // TODO Auto-generated method stub

    }

        //public static Logger getLogger() {
        //  return logger;
        //}

}
4

1 に答える 1

1

PhoneStateListener.LISTEN_SERVICE_STATEフラグを使用して、次のように onServiceStateChanged(ServiceState serviceState) をオーバーライドします

@Override
public void onServiceStateChanged(ServiceState serviceState){
    super.onServiceStateChanged(serviceState);
    TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    int networkType = tm.getNetworkType();
}

この関数は、ネットワーク タイプが変更されるたびに起動します。

于 2013-06-25T07:14:10.963 に答える