3

我有一个应用程序(称为 A),它运行一个模拟从蓝牙 GPS 获得的位置的服务,以便在另一个应用程序中使用它(称为 B):

  1. A(具有获取蓝牙 GPS 位置的服务)
  2. android系统中的模拟位置
  3. B(从安卓系统获取位置)

一切都适用于Android 7.0,但在Android 8.0(Oreo)中,应用程序B不会读取从蓝牙获得的位置,也就是说,我认为是因为模拟位置的问题,因为日志总是打印这一行:

E PassiveLocationListener_FLP: isFromMockProvider, return

我用来模拟该位置的代码是:

 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权限,并且允许该应用程序在Developer Settings中模拟位置。

我究竟做错了什么?

提前致谢,祝您有美好的一天。

4

1 回答 1

0

Oreo 的(三星?)开发人员设置屏幕中似乎存在错误。我还将我的应用程序设置为模拟提供程序并在清单中获得许可。对我来说,通过删除应用程序作为模拟位置提供程序并再次添加它来解决问题:

Developer options -> Mock location app -> No apps
Developer options -> Mock location app -> Your app

我仍然在 logcat 中看到这些消息:

E/PassiveLocationListener_FLP: isFromMockProvider, return
I/LocationManagerService: remove xxxxxxx 
I/LocationManagerService: removeUpdates, receiver.requestedID = xxxxxxx, receiver.mIdentity.mPid = 2908, receiver.mIdentity.mUid = 1000
D/SLocation: removeGpsStatusListener
D/ListenerMonitor_FLP: removeListener, not existed listener android, xxxxxxx in mListenerIdMap
E/RequestManager_FLP: [LocationManagerService] Location remove xxxxxxx from system
于 2019-03-15T11:47:31.587 回答