使用 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 <= 30
和 Api >= 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);
我正在尝试查找该位置是否来自模拟提供商,如下所示
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 <= 30
和 Api >= 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);