java.lang.NoSuchMethodError: Нет виртуального метода getMccString () Ljava / lang / String; - PullRequest
0 голосов
/ 19 февраля 2019

Я получаю данные информации о ячейке (CellInfo) из TelephonyManager

Для каждого объекта информации о ячейке я запрашиваю mcc (мобильный код страны) и MNC (код мобильной сети) через

eachCellInfo.cellIdentity.mcc
eachCellInfo.cellIdentity.mnc

, где eachCellInfo является объектом CellInfo

Функция устарела согласно документу:

    /**
     * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown
     * @deprecated Use {@link #getMncString} instead.
     */
    @Deprecated
    public int getMnc() {
        return (mMncStr != null) ? Integer.valueOf(mMncStr) : Integer.MAX_VALUE;
    }

Однако, когда я использую предложенный метод, который через

    eachCellInfo.cellIdentity.mccString

Описание метода:

        /**
         * @return Mobile Country Code in string format, null if unknown
         */
        public String getMccString() {
            return mMccStr;
        }

Я получаю следующие журналы сбоев:

java.lang.NoSuchMethodError: No virtual method getMccString()Ljava/lang/String; in class Landroid/telephony/CellIdentityLte; or its super classes (declaration of 'android.telephony.CellIdentityLte' appears in /system/framework/framework.jar!classes2.dex)
 )

Дайте мне знать, если мне не хватает какой-либо информации и возможной причины такого поведения.

Other Infor:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip 
kotlin_version = '1.3.21' 
classpath 'com.google.gms:google-services:4.2.0' 
classpath 'com.android.tools.build:gradle:3.3.1'
Debug Version
minifyEnabled false
shrinkResources false

1 Ответ

0 голосов
/ 19 февраля 2019

Этот метод был представлен в Android API 28 - отметьте здесь - что означает, что он не будет доступен в версиях ранее.

Это будет работать на устройствах, работающих под API 28+ и будетбросить это исключение в устройствах с более низким уровнем API.

Обычно правильный способ сделать это - ввести проверки для версии:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
   // Safe to use getMccString
} else {
   // Use something else that could work if there's something
}

Обратите внимание, что только потому, что вы можете просматривать источник вна вашем компьютере это не означает, что на устройстве, на котором работает ваше приложение, будет работать тот же код Android - в большинстве случаев это не так.

...