在 FusedLocationProviderClient 中以编程方式设置模拟位置

And*_*i F 5 gps android location google-maps

我正在尝试在我的应用程序中使用模拟位置进行测试。为了接收位置更新,我在这里使用了最新的 Android 开发人员文档: https ://developer.android.com/training/location/receive-location-updates

本教程使用 FusedLocationProviderClient 和 locationClient.requestLocationUpdates(createLocationRequest(), locationCallback, null) 作为示例。

问题是我无法再使用权限:

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

因为我收到错误“权限仅授予系统应用程序”(我也在调试模式下尝试过)

所以我尝试了以下代码,但它不起作用:

    locationClient.setMockMode(true);

    String[] tokens = location.split(",");
    Location newLocation = new Location(LocationManager.GPS_PROVIDER);
    newLocation.setLatitude(Float.parseFloat(tokens[0]));
    newLocation.setLongitude(Float.parseFloat(tokens[1]));

    newLocation.setAccuracy(3.0f);

    newLocation.setTime(System.currentTimeMillis());


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
    }
    locationClient.setMockLocation(newLocation);
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?

And*_*i F 1

似乎添加了

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

即使 Android Studio 说“权限仅授予系统应用程序”,调试 Android 清单的权限仍然有效。

所以解决方案是,添加后,运行应用程序,然后转到设置/开发人员选项/选择模拟位置应用程序 - >此处出现我的应用程序,我可以选择它。

我希望其他人能够确认并使用这个!

  • 对我不起作用 - 应用程序出现在模拟位置中,但在设置模拟位置时应用程序崩溃并显示“com.app.package.from uid 10094 not allowed to Perform MOCK_LOCATION” (2认同)