使用 isMock() 函数(查找 mockLocation)给出错误

Using isMock() function (to find mockLocation) giving error

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

  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 <= 30Api >= 31 中处理模拟位置不同。因此,isMock() 用于 Api >= 30。但是当我 运行 上面的代码出现以下错误时

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

我是否遗漏了任何导入语句?

Location class 上的 isFromMockProvider() 或 isMock() 方法总是会在此处抛出错误,因为根据 API 版本的Android 设备。

所以我们需要在这个场景中动态调用对应的方法。反射 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);