Сила сигнала на Android сохраняется как переменная - PullRequest
1 голос
/ 02 марта 2012

Я пытаюсь создать приложение, которое сохранило бы текущий уровень сигнала. До сих пор я видел много примеров, которые расширяют PhoneStateListener, но все они используют Toast для отображения этой информации, как в этом примере:

http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/

Мне было интересно узнать пару вещей:

a) Всегда ли мне нужно использовать PhoneStateListener И переопределять onSignalStrengthsChanged (SignalStrength signalStrength)?

б) Как я могу получить доступ к значению signalStrength.getGsmSignalStrength () вне класса PhoneStateListener?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 02 августа 2013

Я могу опоздать с ответом на ваш вопрос, но если вы все еще ищете ответ, вот он:

a) да, вы должны использовать PhoneStateListener и переопределить onSignalStrengthsChanged as, насколько мне известноэто единственный способ получить текущий уровень сигнала ячеек для GSM.Слушатель вызывается только при больших изменениях уровня сигнала, поэтому вы сами не можете контролировать слушателя.слушатель будет автоматически обновлять или произносить тост, когда он вызывается.Поэтому лучше объявить прослушиватель и попросить его прослушивать в onCreate ().

b) Для получения доступа к значению RSSI извне Listener не сложно, просто сохраните значение в переменной исоздайте метод, подобный getRSSI (), который будет возвращать вам значение при его вызове.Пример приведен ниже:

    public class GsmRSSI extends Activity{
    MyPhoneStateListener MyListener;
    TelephonyManager Tel;
    ArrayList<String> signalStrength = new ArrayList<String>();

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyListener = new MyPhoneStateListener();
    Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

    timer.schedule(new TimerTask() {
        public void run() {
            String rssi = MyListener.getStrength();
                            if(!rssi.equals(""))
                               signalStrength.add(rssi);
        }
    }, 0, 5000);//it will add the rssi value after every 5000ms
    }


       private 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;
    }

    }
    }

Это должно сделать работу за вас.Но в начале вы можете не получить какое-либо значение rssi в течение некоторого времени, так как слушатель вызывается только тогда, когда в rssi происходят значительные изменения.

0 голосов
/ 02 марта 2012

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

...