【问题标题】:Using isMock() function (to find mockLocation) giving error使用 isMock() 函数(查找 mockLocation)给出错误
【发布时间】:2021-08-18 05:49:40
【问题描述】:

我正在尝试查找该位置是否来自模拟提供商,如下所示

  Location location = locationResult.getLastLocation();
  if (android.os.Build.VERSION.SDK_INT <= 30)
     allLocationData.put("isMock", location.isFromMockProvider());
  else if(android.os.Build.VERSION.SDK_INT >= 31)
     allLocationData.put("isMock", location.isMock());

Api &lt;= 30Api &gt;= 31 中处理模拟位置不同。因此,isMock() 将用于Api &gt;= 30。但是当我运行上面的代码时出现以下错误

  error: cannot find symbol allLocationData.put("isMock", location.isMock());
                                                              ^
  symbol:   method isMock()
  location: variable location of type Location

我在这里遗漏了任何导入语句吗?

【问题讨论】:

    标签: android mock-location


    【解决方案1】:

    Location 类上的 isFromMockProvider() 或 isMock() 方法总是会在此处引发错误,因为根据 Android 设备的 API 版本,这些方法中只能存在一个。

    所以我们需要在这个场景中动态调用对应的方法。而反射 API 是一条可行的路。

    您的代码可以更改如下,使用反射动态调用方法。

    String methodName = "";
    Boolean isMock = false;
    Location location = locationResult.getLastLocation();
    **//Determine the method name to be invoked**
    if (android.os.Build.VERSION.SDK_INT <= 30) {
        methodName = "isFromMockProvider";
    } else if(android.os.Build.VERSION.SDK_INT >= 31) {
            methodName = "isMock";
    }
         
    **//Invoke the method dynamically using Reflection**
    Class<? extends Location> cls = location.getClass();
    try {
        Method decMethod = cls.getDeclaredMethod(methodName);
        isMock = (Boolean) decMethod.invoke(location);
    } catch (Exception e) {
        //Handle exception
    }
                
    **//Store the result finally**
    allLocationData.put("isMock", isMock);
    

    【讨论】:

    • 遇到两个错误cannot find symbol MethodCannot resolve method 'invoke(android.location.Location)'
    • 请添加import语句import java.lang.reflect.*;
    猜你喜欢
    • 1970-01-01
    • 2015-07-11
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多