getPsc() с использованием GsmCellLocation всегда возвращает -1
Я успешно получаю GsmCellLocation
и связанную информацию о cid и lac, но PSC (первичный код скремблирования) обслуживающей соты всегда возвращается с инициализированным значением -1. Кто-нибудь может получить реальное значение PSC обслуживающей соты?
telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
psc = cellLocation.getPsc();
Log.d(TAG, "PSC = " + psc);
У меня есть все необходимые разрешения. Мой список соседей тоже пуст, но сейчас это не проблема.
2 ответа
PSC доступен только в сети UMTS.
Проверьте тип сети getNetworkType, если это NETWORK_TYPE_UMTS
и не NETWORK_TYPE_EDGE
Я читал, что это работает на некоторых телефонах - одним из них является телефон Google Nexus.
Я попытался запустить ваш тестовый код на моей Motorolla Razr - он возвращает -1.
Глядя на исходный код Android (GsmServiceStateTracker.java), кажется, что эта функция является необязательной и, скорее всего, не реализована на многих телефонах. Информация, которую вы ищете, отправляется в виде незапрошенного сообщения от модема GSM и не используется ни для чего другого (насколько я вижу из источников Android), кроме значения, возвращенного из getPsc()
,
Я имею в виду, зачем реализовывать это, если не нужно.
Я также попытался расширить ваш тестовый код для получения информации о соседних ячейках, которая также может быть использована для получения их значений PSC. Это не работает, так как команда at, используемая для получения информации о соседней соте, не реализована в GSM-модеме моего телефона.
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
Log.d(TAG, "cid = " + cellLocation.getCid());
Log.d(TAG, "lac = " + cellLocation.getLac());
int psc = cellLocation.getPsc();
Log.d(TAG, "PSC = " + psc);
List<NeighboringCellInfo> neighCell = null;
neighCell = telephonyManager.getNeighboringCellInfo();
for (int i = 0; i < neighCell.size(); i++)
{
NeighboringCellInfo thisCell = neighCell.get(i);
int CID = thisCell.getCid();
int RSSI = thisCell.getRssi();
int PSC = thisCell.getPsc();
Log.d(TAG, " "+CID+" - "+RSSI + " - " + PSC);
}
Если вы действительно хотите выяснить, на каких телефонах это реализовано, вам следует добавить тест в какое-либо приложение для тестирования и, надеюсь, получить какие-то результаты вовремя.