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

Если вы действительно хотите выяснить, на каких телефонах это реализовано, вам следует добавить тест в какое-либо приложение для тестирования и, надеюсь, получить какие-то результаты вовремя.

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