Как вернуть значение из Android PhoneStateListener?

#java #android

#java #Android

Вопрос:

Я хочу получить текущую информацию о ячейке, используемую для передачи данных. До Android Q я мог легко получить его через getallcellinfo(). Однако, начиная с Android Q, об этом будет сообщаться через onCellInfoChanged().

Мне не нужно прослушивать измененную информацию о ячейке, мне просто нужна информация о ячейке в момент вызова метода. Я не могу просто вернуть ((CellInfoLte) cellInfo).getCellIdentity().getEarfcn(); внутри PhoneStateListener. Как это реализовать?

 public int getEarfcn() {
  telephonyManager.listen(new PhoneStateListener() {
    @Override
    public void onCellInfoChanged(List<CellInfo> cellInfoList) {
      super.onCellInfoChanged(cellInfoList);
      for (CellInfo cellInfo : cellInfoList) {
        if (cellInfo instanceof CellInfoLte) {
          int earfcn = ((CellInfoLte) cellInfo).getCellIdentity().getEarfcn();
          // How to return this "earfcn" once I get it?
        }
      }
    }
  }, PhoneStateListener.LISTEN_CALL_STATE);
  return CellInfo.UNAVAILABLE;
}
  

Комментарии:

1. Я думаю, что это проблема XY xyproblem.info потому что вы можете получить значение внутри вашего объекта с помощью переменной внутри основного класса, а после проверить, равна ли эта переменная нулю или имеет какое-то значение!

Ответ №1:

Вы не можете использовать return. Создайте такой же интерфейс

 public voi getEarfcn(ICellInfoChanged cellInfoChangedCallback) {
  telephonyManager.listen(new PhoneStateListener() {
    @Override
    public void onCellInfoChanged(List<CellInfo> cellInfoList) {
      super.onCellInfoChanged(cellInfoList);
      for (CellInfo cellInfo : cellInfoList) {
        if (cellInfo instanceof CellInfoLte) {
          int earfcn = ((CellInfoLte) cellInfo).getCellIdentity().getEarfcn();
          cellInfoChangedCallback.onCallback(cellInfo);
        }
      }
    }
  }, PhoneStateListener.LISTEN_CALL_STATE);
}
  

Комментарии:

1. Не удается разрешить метод ‘getEarfcn’ в ‘CellIdentityLte’? любое предложение!