Уровень сигнала 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