java.lang.NoSuchMethodError:没有虚拟方法getMccString()Ljava / lang / String;

时间:2019-02-19 13:03:29

标签: android kotlin telephony telephonymanager

我正在从properties检索小区信息数据(CellInfo

对于每个单元格信息对象,我要通过

查询 mcc (移动国家/地区代码)和 mnc (移动网络代码)
TelephonyManager

其中每个CellInfo是CellInfo的对象

该功能已根据文档弃用:

eachCellInfo.cellIdentity.mcc
eachCellInfo.cellIdentity.mnc

但是,当我使用建议的方法时,

    /**
     * @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)
 )

1 个答案:

答案 0 :(得分:2)

此方法是Android api 28中引入的-检查here-这意味着它在以前的版本中不可用。

这将在运行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代码-大多数情况下并非如此。