0

I'm facing an issue with getAllCellInfo().

App has permissions needed :

here is my code :

1- listener

private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
        @TargetApi(Build.VERSION_CODES.M)
        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
            super.onSignalStrengthsChanged(signalStrength);

2- Info from SignalStrength

TextView comparisonText = (TextView) findViewById(R.id.textViewComparison);
            Object ssFieldValueRsrp = null;
            Object ssFieldValueRsrq = null;
            Object ssFieldValueRssnr = null;
            Object ssFieldValueCqi=null;
            try {
                Field privateStringSsFieldRSRQ = SignalStrength.class.getDeclaredField("mLteRsrq");
                Field privateStringSsFieldRSRP = SignalStrength.class.getDeclaredField("mLteRsrp");
                Field privateStringSsFieldRssnr = SignalStrength.class.getDeclaredField("mLteRssnr");
                Field privateStringSsFieldCqi = SignalStrength.class.getDeclaredField("mLteCqi");

                privateStringSsFieldRSRQ.setAccessible(true);
                ssFieldValueRsrq = privateStringSsFieldRSRQ.get(signalStrength);

                privateStringSsFieldRSRP.setAccessible(true);
                ssFieldValueRsrp = privateStringSsFieldRSRP.get(signalStrength);

                privateStringSsFieldRssnr.setAccessible(true);
                ssFieldValueRssnr = privateStringSsFieldRssnr.get(signalStrength);

                privateStringSsFieldCqi.setAccessible(true);
                ssFieldValueCqi = privateStringSsFieldCqi.get(signalStrength);


            } catch (NoSuchFieldException ex) {
            } catch (IllegalAccessException x) {
            }
            String ssRsrp = Integer.toString((int) ssFieldValueRsrp);
            String ssRsrq = Integer.toString((int) ssFieldValueRsrq);
            String ssRssnr = Integer.toString((int) ssFieldValueRssnr);

            String ssCqi = Integer.toString((int) ssFieldValueCqi);

            String headerString = "Info from \"SignalStrength\":";
            SpannableString spannableHeaderString = new SpannableString(headerString);
            spannableHeaderString.setSpan(new UnderlineSpan(), 0, spannableHeaderString.length(), 0);

            comparisonText.setText(spannableHeaderString);
            comparisonText.append
                    (
                            "\nRSRP: " + ssRsrp
                                    + "\nRSRQ: " + ssRsrq
                                    +"\nCQI: "+ ssCqi
                            +"\nRSSNR: "+ ssRssnr
                    );

3- Info from CellSignalStrengthLte

Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            List<android.telephony.CellInfo> infor = tm.getAllCellInfo();
            for (android.telephony.CellInfo info : infor)
            {
                if (info instanceof CellInfoLte)
                {
                    CellSignalStrengthLte ss = ((CellInfoLte) info).getCellSignalStrength();
                    //theButton.setText( ss.toString());

                    Object fieldValueRSRP = null;
                    Object fieldValueRSRQ = null;
                    Object fieldValueRssnr = null;
                    Object fieldValueCqi=null;

                    try
                    {
                        Field privateStringFieldRSRQ = CellSignalStrengthLte.class.getDeclaredField("mRsrq");
                        Field privateStringFieldRSRP = CellSignalStrengthLte.class.getDeclaredField("mRsrp");
                        Field privateStringFieldCqi = CellSignalStrengthLte.class.getDeclaredField("mCqi");
                        Field privateStringFieldRSSNR = CellSignalStrengthLte.class.getDeclaredField("mRssnr");

                        privateStringFieldRSRQ.setAccessible(true);
                        fieldValueRSRQ = privateStringFieldRSRQ.get(ss);

                        privateStringFieldRSRP.setAccessible(true);
                        fieldValueRSRP = privateStringFieldRSRP.get(ss);

                        privateStringFieldRSSNR.setAccessible(true);
                        fieldValueRssnr = privateStringFieldRSSNR.get(ss);

                        privateStringFieldCqi.setAccessible(true);
                        fieldValueCqi = privateStringFieldCqi.get(ss);

                    }
                    catch (NoSuchFieldException ex) {}
                    catch (IllegalAccessException x) {}
                    String rsrp = Integer.toString((int) fieldValueRSRP);
                    String rsrq = Integer.toString((int) fieldValueRSRQ);

                    String rssnr = Integer.toString((int) fieldValueRssnr);
                    String cqi = Integer.toString((int) fieldValueCqi);

                    headerString = "Info from \"CellSignalStrengthLte\":";
                    spannableHeaderString = new SpannableString(headerString);
                    spannableHeaderString.setSpan( new UnderlineSpan(), 0, spannableHeaderString.length(), 0);

                    theText.setText
                    (
                        "\nAltitude: " + loc.getAltitude() + "\n\n"+loc.getLongitude()+"\n\n"+loc.getLatitude()+"\n\n"
                    );
                    theText.append(spannableHeaderString);
                    theText.append
                    (
                        "\nRSRP: " + rsrp
                        + "\nRSRQ: " + rsrq
                                + "\nCQI: " + cqi
                                + "\nRSSNR: " + rssnr
                    );
                }
            }

Huawei Y6II : marshmallow (android 6) :

App run smoothly but function skipped

enter image description here

Huawei Nova3i (android 9)

app crashes with null pointer on List<android.telephony.CellInfo> infor = tm.getAllCellInfo();

Samsun S10 (android 9)

app running perfectly

enter image description here

K_mns
  • 683
  • 4
  • 10

1 Answers1

0

Resolved :

This issue is related to some dual SIM phones

K_mns
  • 683
  • 4
  • 10