【问题标题】:Fake mock location won't change on google maps谷歌地图上的假模拟位置不会改变
【发布时间】:2014-08-08 11:35:43
【问题描述】:


我对创建 android 应用程序非常陌生,所以我有一个问题:

您能告诉我为什么真正的 android 设备无法识别取自 JSON 的模拟(假)位置吗?

功能:

public void setLocation(double latitude, double longitude,Context ctx) {
          LocationManager mLocationManager = (LocationManager)    ctx.getSystemService(Service.LOCATION_SERVICE);
            if (mLocationManager.getProvider("spoof") == null) {
                 mLocationManager.addTestProvider("spoof", false, true, false, false, false, false, false, 0, 5);
                 mLocationManager.setTestProviderEnabled("spoof", true);
                }
                 Location loc = new Location("spoof"); 
                 loc.setLatitude(latitude);
                 loc.setLongitude(longitude);
                 loc.setTime(System.currentTimeMillis());
                 loc.setAccuracy(16F);
                 loc.setAltitude(0D);
                 loc.setBearing(0F);
                 mLocationManager.setTestProviderLocation("spoof", loc); 
                 Toast.makeText(getBaseContext(), "Lat:"+latitude+" - Lng:"+longitude, Toast.LENGTH_LONG).show();
    }

所以现在我有double 纬度和经度,它们被设置为latalonga

这是运行函数的代码

setLocation(lata,longa, getBaseContext());

函数和向函数发送数据可以正常工作,因为它使用Toast.makeText 打印出经纬度,但问题是谷歌地图,谷歌导航器不会看到新位置,而设置是真实的..改用网络位置..

我尝试在没有 GPS 的设备上运行它 - 安卓 4.0.3 - 安卓4.2.2

提前谢谢你!

【问题讨论】:

  • 你正在使用我想是新的 api?
  • @andrei “新 api” 是什么意思? @SuppressLint("NewApi")?
  • 谷歌地图 api 2 我的意思是。 developers.google.com/maps/documentation/android/start
  • @andrei 嗯,我不使用谷歌地图 API,我只是获取 ajax 数据并尝试更改设备的位置。我认为它应该在不包括谷歌地图 api 的情况下工作?
  • 现在的问题是,您在哪个“事物”上看到了蓝点?谷歌地图,对吧?

标签: java android google-maps


【解决方案1】:

我想我明白了,我为您的这个特定问题所做的如下:
您必须创建一个扩展 LocationSource 的类,如下例所示:

public class MyLocationSource implements LocationSource{

        //either save it or add it to a list
        //adivsable would be to create one instance for each listener not an array.
        OnLocationChangedListener listener;

        public MyLocationSource () {


        }
        //Google maps somehow extends this OnLocationChangedListener
        @Override
        public void activate(OnLocationChangedListener mListener) {
             this.listener =  mListener;
             //initially u save the listener
             //here u can make a mix between what the GPS delivers and your manual loc

        }

        @Override
        public void deactivate() {

           //here u can stop the updates
           listener = null;
        }


        protected void fireUpdate(Location loc) {

                if (listener != null && loc != null) {
                        listener.onLocationChanged(loc);
                }
        }
}

现在您在谷歌地图中所要做的就是实例化这个类并尝试使用我给您的内容提供您想要的位置。
有关激活/取消激活的更多详细信息,您可以在以下地址找到:
http://developer.android.com/reference/com/google/android/gms/maps/LocationSource.html
另外你可以看看commonswguy:
https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2/Location

【讨论】:

  • 嘿,谢谢,我做了一切,从某个地方得到了 MockLocationListener.java.. 在 onLocationChanged(在 MockLocationListener.java 内部)之前,并非一切都很好。在日志中它显示它可以工作和东西,但是我怎样才能让 Android 认为收到的信息是真实的? - 如何设置?请检查 mocklocationlistener java 文件:pastebin.com/r7uNPwVv
  • 嗯,基本上你可以试试看下面的链接。 mobiarch.wordpress.com/2012/07/17/…。但如果我是你,我会做不同的事情,我会创建一个扩展 LocationListener 的类,并添加一些代码来支持来自 GPS 提供者的位置和由 GPS 提供者设置的位置,最后只通知听众。在您的情况下,您可能没有在清单中设置模拟位置选项。
  • 嗨 Andrei 我知道这是一个较老的问题,但我正在尝试做类似的事情。我正在尝试让服务充当模拟位置提供者。当您说“在谷歌地图中实例化此类”时,您是什么意思?我能找到的所有示例似乎都说使用 getMapAsync 注册回调以获取 GoogleMap,然后我可以使用它来推送模拟 Location 对象。你知道你是否可以为实际的谷歌地图应用程序设置位置源吗?谢谢
  • 查看这个正在进行的小项目:github.com/toaderandrei/live_tracking
  • 这看起来您仍在使用自己的地图片段,设置其位置源,然后为您自己的地图片段提供位置源(查看 LocationFragment.java)。有没有办法通过手机上默认安装的谷歌地图应用程序来做到这一点?我是不是找错地方了?
猜你喜欢
  • 1970-01-01
  • 2013-02-10
  • 2016-11-05
  • 2015-09-16
  • 2011-07-04
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多