我有一个应用程序(称其为A),它运行一个服务,模拟从蓝牙GPS获取的位置,以便在另一个应用程序(称其为B)中使用:
- A(带有获取蓝牙GPS位置的服务)
- Android系统中的模拟位置
- B(从Android系统获取位置)
在Android 7.0上一切正常,但在Android 8.0(Oreo)上,应用程序B无法读取从蓝牙获取的位置,我认为这是由于位置模拟出现问题导致的,因为日志始终打印出以下行:
E PassiveLocationListener_FLP: isFromMockProvider, return
我使用的代码来模拟位置是:
```html
我使用的代码来模拟位置是:
``` private void changeToMockLocation() {
Log.i(TAG, "changeToMockLocation()");
Location newLocation = new Location(PROVIDER_NAME);
newLocation.setLatitude(mNMEAData.getLatitude());
newLocation.setLongitude(mNMEAData.getLongitude());
newLocation.setAccuracy(mNMEAData.getAccuracy());
newLocation.setTime(System.currentTimeMillis());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
}
// Set mock location.
if (ActivityCompat.checkSelfPermission(
mContext, android.Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
try {
mLocationManager.setTestProviderLocation(PROVIDER_NAME, newLocation);
} catch (Exception e) {
Log.e(TAG, "Error while setting test provider location: " + e);
}
}
}
事实是,我没有看到异常输出,所以我认为流程是正确的,但是好像Android出于某种原因不允许我这样做,我无法解释。
在清单文件中声明了ALLOW_MOCK_LOCATION权限,并且该应用程序被允许在“开发者选项”中模拟位置。
我做错了什么?
提前感谢您并祝您有美好的一天。