Уровень сигнала Android 3G

Почему мы должны настроить прослушиватель, чтобы получить уровень сигнала одиночной токовой ячейки в режиме 3g?

Мы получаем уровень сигнала соседней ячейки, используя класс NeghbouringcellInfo?

Почему мы не можем получить силу сигнала такой ячейки?

4 ответа

Решение

Реализация такова, что мы должны реализовать слушателя, чтобы получить уровень сигнала текущей ячейки, я написал слушатель и остановил слушателя при первом чтении, а затем сохранить в переменной. нет другого пути

Попробуйте следующий код:

    ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();


    if (is3g) {
        myListener = new MyPhoneStateListener();
        TelephonyManager telManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        telManager.listen(myListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
    }

    private class MyPhoneStateListener extends PhoneStateListener {
        public int singalStenths = 0; 
        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength){
            super.onSignalStrengthsChanged(signalStrength);
            int singalStrength  = signalStrength.getGsmSignalStrength();
            singalStenths = signalStrength.getGsmSignalStrength();
            System.out.println("----- gsm strength" + singalStrength );
            System.out.println("----- gsm strength" + singalStenths );

            if (singalStenths > 30) {
                signalstrength.setText("Signal Str : Good");
                signalstrength.setTextColor(getResources().getColor(R.color.good));
            }
            else if(singalStenths > 20 && singalStenths < 30) {
                signalstrength.setText("Signal Str : Average");
                 signalstrength.setTextColor(getResources().getColor(R.color.average));
            }
            else if(singalStenths < 20) {
                signalstrength.setText("Signal Str : Weak");
                 signalstrength.setTextColor(getResources().getColor(R.color.weak));
            }
        }
    };

Я пытался использовать код "Hazmat", но, к сожалению, не работает на моем устройстве (Samsung S3 mini Android 4.1.2). Кажется, что некоторые телефоны от Samsung имеют проблемы с этой функцией, и никто из Samsung не заботится. Также другие модели Samsung имеют аналогичную проблему:

Samsung Galaxy SI -> нет проблем

Samsung Galaxy SII -> нет сил и нет обновления

Samsung Galaxy Tab 10.1 -> без сил и без обновления

Samsung Galaxy Note -> нет сил и нет обновления

(Версии Android: 2.3.3, 2.3.4, 2.3.5, 3.1)

Также сообщается здесь и здесь.

Вывод: имейте в виду, что многие устройства Samsung не работают должным образом с этой функцией! Я не знаю никакого обходного пути для этого. Samsung делает наши приложения ненадежными.

Если я хорошо понимаю, вы не хотите настраивать слушателя, а просто получаете уровень сигнала, когда вам это нужно. Если это так, вот как это сделать:

android.telephony.SignalStrength

Вы получите 3G или CDMA или любой другой тип сотовой связи, к которой вы подключены.

Надеюсь, поможет.

-------- РЕДАКТИРОВАТЬ после комментариев --------------

Слушатель - это просто хороший способ получить информацию о том, что вас интересует, без необходимости постоянно опрашивать его. Это гораздо эффективнее.

Вот пример, который я взял из исходного кода Android.

public void onSignalStrengthsChanged(SignalStrength signalStrength) {
        if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
            String updateMsg = "cdma dBM=" + signalStrength.getCdmaDbm();
            mTrackerData.writeEntry(SIGNAL_PROVIDER_TAG, updateMsg);
        } else if  (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
            String updateMsg = "gsm signal=" + signalStrength.getGsmSignalStrength();
            mTrackerData.writeEntry(SIGNAL_PROVIDER_TAG, updateMsg);
        }
    }

Это взято из frameworks/base/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java, Да, этот метод вызывается слушателем, но это не обязательно. это просто гораздо более эффективный способ, чем постоянный опрос. С другой стороны, если вы просто хотите получить мощность сигнала в определенное время, всего один выстрел, ничто не мешает вам просто вызвать его откуда-то еще.

Также я предлагаю вам скачать свой дистрибутив Android. С помощью "grep" он дает много примеров того, как используются классы, методы и т. Д. Я многому учусь на этом. Эти примеры хороши, так как они были написаны людьми, которые написали ОС. Кроме того, вы можете получить исходный код на исходный код Android

Другие вопросы по тегам