在FusedLocationProviderClient中编程设置模拟位置

5

我正在尝试在我的应用程序中使用模拟位置进行测试。为了接收位置更新,我使用了最新的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" />

因为我收到了“只有系统应用程序被授权”的错误(我也在调试模式下尝试过)。
所以我尝试了以下代码,但它没有起作用:
    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);

有人知道如何解决这个问题吗?
1个回答

1

It seems that adding the

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

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

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

我希望其他人可以确认并使用这个方法!


2
对我没用 - 应用程序出现在模拟位置中,但是当设置模拟位置时,应用程序会崩溃并显示“com.app.package.from uid 10094 not allowed to perform MOCK_LOCATION”。 - user1114
更新(无法删除踩)- 基本上设备显示模拟位置应用程序的名称,并在设置模拟位置时崩溃。但是,当我手动将其设置为模拟位置应用程序(即使它已经显示为模拟位置应用程序!),它可以正常工作而不会崩溃。因此,上面的答案实际上是有效的。如果可以的话,我会重新点赞。另外,请记住将位置模式设置为仅设备-否则模拟位置将被真实位置覆盖。 - user1114

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接