微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何正确和一致地模拟Android中的位置?

这是我试过的:

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    String provider = locationManager.getBestProvider(criteria,true);
    locationManager.addTestProvider(provider,false,true,Criteria.ACCURACY_FINE);
    locationManager.setTestProviderEnabled(provider,true);

    Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            Location location = new Location(provider);
            location.setLatitude(...);
            location.setLongitude(...);
            location.setAccuracy(Criteria.ACCURACY_FINE);
            location.setTime(System.currentTimeMillis());
            location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
            locationManager.setTestProviderLocation(provider,location);

            handler.postDelayed(this,INTERVAL);
        }
    };

    handler.postDelayed(runnable,INTERVAL);

问题是,无论我设置INTERVAL多低,谷歌地图上的标记似乎都不能停留在模拟位置.它总是闪回原始位置,直到再次调用Runnable上的run().我相信有一种合法的方式来模拟位置而不是我的循环Handler.

解决方法

当你拨打这一行时

locationManager.setTestProviderLocation(provider,location);

它设置了此提供程序的当前位置,假设我的测试提供程序是AbcProvider

String provider = "AbcProvider";
location.setProvider(provider);
locationManager.setTestProviderLocation(provider,location);

> locationManager.getLastKNownLocation(“AbcProvider”);返回当前设置的位置
如果你调用requestLocationUpdates(“AbcProvider”,…),将会触发onLocationChanged();

你的代码没问题!但要明确你想看到嘲弄的结果.运行代码后,如果您自己查看Google地图应用,则模拟将无法正常工作,因为它无法通过LocationManager获取位置.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐