为什么地图标记会在地图周围倾斜

2023-12-05

我在 Android Studio 中,有一个带有两个标记的地图片段 (com.google.android.gms.maps.SupportMapFragment)。一种是静态的,称为目标。另一个跟踪我的行动,被称为猎人。它有效,但问题是猎人标记会晃动。我将更新间隔设置为 15 毫秒,但在步行速度下,它大约每个块更新一次。

那么,如何正确添加标记来跟踪我的位置,并使其相当准确并实时更新?或者我在这里做错了什么?

Greg

onCreate()

    setUpMapIfNeeded();

    if (mMap != null) {
        LatLng Target = new LatLng(TargetLat, TargetLong);
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(Target, 15));
    }


    LocationManager locationManager = (LocationManager) this.getSystemService(this.LOCATION_SERVICE);

    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            makeUseOfNewLocation(location);
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {}

        public void onProviderEnabled(String provider) {
            registerForUpdates();
        }

        public void onProviderDisabled(String provider) {
            deregisterForUpdates();
        }
    };

    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);


private void registerForUpdates() {
    _locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_FREQUENCY_MILLIS, 0, _locationListener);
}

当位置改变时更新标记。当我们接近目标时,振动并改变文本。

    private void makeUseOfNewLocation(Location loc) {
    HunterLat = loc.getLatitude();
    HunterLong = loc.getLongitude();

    if (Hunter != null) {
        LatLng NewLoc = new LatLng(HunterLat, HunterLong);
        Hunter.setPosition(NewLoc);

        TextView txtItem = (TextView) findViewById(R.id.ItemName);

        if (HunterLong > TargetLong - .0007 && HunterLong < TargetLong + .0007 && HunterLat > TargetLat - .0007 && HunterLat < TargetLat + .0007) {
            txtItem.setTextColor(Color.MAGENTA);
            txtItem.setText(ItemName);
            if (!Vibrated){
                Vibrated = true;
                Vibrator v = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE);
                v.vibrate(500);
            }
        }
        else {
            txtItem.setTextColor(Color.BLACK);
            txtItem.setText(getResources().getString(R.string.hunt_item));
        }
    }
    else {
        Hunter = mMap.addMarker(new MarkerOptions().position(new LatLng(HunterLat, HunterLong)).title("You"));
        BitmapDescriptor icon2 = BitmapDescriptorFactory.fromResource(R.drawable.ic_map_person);
        Hunter.setIcon(icon2);

    }
}

设置地图并添加静态目标标记

   private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the map.
    if (mMap == null) {
        // Try to obtain the map from the SupportMapFragment.
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            setUpMap();
        }
    }
}

private void setUpMap() {
    Marker Target = mMap.addMarker(new MarkerOptions().position(new LatLng(TargetLat, TargetLong)).title(Location));
    BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.ic_target);
    Target.setIcon(icon);
}

看到你的后其他问题,看起来非地图活动正在获取onProviderEnabled()回调,但您的地图活动未获取该回调(除非在使用地图活动期间启用了 GPS 无线电)。

而不是仅仅打电话registerForUpdates() in the onProviderEnabled()回调,调用它onCreate()如果启用了 GPS 无线电,则返回到网络位置(如果禁用了 GPS 并且启用了网络位置)。

像这样的东西:

    LocationManager locationManager = (LocationManager) this.getSystemService(this.LOCATION_SERVICE);
    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        registerForUpdates();
    }
    else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    }

另一件需要注意的事情是,您应该从所有位置回调中取消注册onPause()覆盖请求位置更新的活动,这样您的应用程序就不会造成不必要的电池消耗。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么地图标记会在地图周围倾斜 的相关文章

随机推荐

  • 将字符串转换为日期,格式:“dd.mm.yyyy”

    D lt 06 12 1948 which is dd mm yyyy as Date D d m y convert to date 1 2019 12 06 我缺少什么 Sys getlocale 类别 LC ALL 1 LC COLL
  • 使用 php gd2 将图像从一种格式保存为另一种格式

    我有一个数据库 其中有一列填充图像二进制数据 经过一些研究后 我弄清楚了如何检测数据的图像格式 可以说我的图像列中的记录位于gif格式 现在我想用 php gd2 将其保存到jpeg格式 请问 有人可以告诉我该怎么做吗 如果您只想将图像数据
  • 如何在嘈杂的曲线中找到拐点?

    I have the the noisy curve defined by numpy 2D array 正如您所看到的 它有第一个平坦阶段 然后是上升 峰值和衰减阶段 我需要找到上升阶段的起点 此处用红点标记 我如何在 python 中做
  • 如何从 vimscript 循环内插入文本?

    看来从 help while文档说明 NOTE The append and insert commands don t work properly inside a while and for loop 我可以确认他们没有 但是我应该使用
  • LINQ to Sql 左外连接与 Group By 和having 子句

    我花了一天时间尝试将 sql 查询转换为 LINQ lambda 表达式 但没有成功 Mysql查询 SELECT a ID Sum b Value AS Value c ContractValue FROM Contracts a LEF
  • 将 UIImage 转换为 NSData 但保留为 GIF 文件

    我有一个 UIImage 它是一个 GIF 文件 我需要将其变成 NSData 对象 但它需要保留 GIF 所以我不能使用 UIImageJPEGRepresentation 有任何想法吗 一旦它成为 UIImage 它就不再是 gif 了
  • 使用 PHPMailer 发送电子邮件 - 在正文中嵌入图像

    我正在尝试使用 PHPMailer 发送带有图像的 HTML 邮件 正文是从包含所有信息的 html 文件加载的 发送邮件时 图像不会出现在正文中 尽管我什至也将图像作为附件发送 HTML img 标签指向与该地点相同的地点 PHP mai
  • 将 MVP 模式应用于 JDialogs

    我正在编写一个 Swing 应用程序 并进一步我之前的问题 已决定使用模型 视图 呈现器模式将用户界面与业务逻辑分开 当我的应用程序启动时 它会执行以下代码 Model model new BasicModel Presenter pres
  • 最大化浮动div?

    假设我有 2 个并排的 div 1 个向左浮动 另一个向右浮动 现在假设我将左侧浮动 div 的大小固定为 200px 如何强制右侧浮动 div 最大化 自身或占据其余的水平屏幕空间 无论浏览器窗口的大小如何 这是一个使用position
  • 如何获取 Windows 10 的内容?UWP/C# 中的通知?

    我正在尝试获取用户通知中的文本 以及单击通知时发生的操作 我获得用户的阅读权限 使用UserNotificationListener RequestAccessAsync 然后迭代它们 并将它们添加到 ListView 中 private
  • JIT 拒绝内联微小方法

    我错过了严重的优化 因为 JIT 不会内联我的很多方法 例如 让我们有以下代码 static void Main string args IsControl 0 public static bool IsControl char c ret
  • 如何在php中调用bootstrap模态

    我正在尝试调用 html 文件中的模式 该模式隐藏在另一个模式旁边 其中一个在单击按钮时出现 但另一个将由 php 作为验证过程的一部分调用 这是我的 php 代码 File include index2 html Msg Welcome
  • Gmail API 是否支持使用 OAuth 服务帐户?

    我正在尝试将 Gmail API 与 Python Google 客户端库一起使用 我已经通过 Google 开发者控制台创建了一个服务帐户凭据 然后我尝试使用这些凭据 例如 from oauth2client client import
  • 使用新的 GPG 密钥放弃之前的 Git 提交

    我正在尝试转换到新的 GPG 密钥 我想在 Git 存储库中重新签署我之前的所有提交 具有使用我以前使用过的密钥进行有效签名 使用新的 GPG 密钥 换句话说 我如何自动退出 使用我的新密钥 我使用以前的密钥签名的所有提交 如果您需要在示例
  • Ruby 中未提取返回值

    def get dept class type departments classifications types select one 3 Department all each do d departments lt lt d name
  • Java 中的用户输入超时

    我正在尝试构建具有此功能的命令行界面 如果用户花费超过 15 秒的时间来插入输入 在本例中为整数 则该函数将做出默认选择 0 下面的代码是我到目前为止编写的并且可以正常工作 问题是我想添加一个新功能 如果用户写了错误的数字 范围 控制台应该
  • NASM 我应该在调用函数后弹出函数参数吗?

    假设我有一个像这样的 nasm 函数 inc mov rax rsp 8 add rax BYTE 1 ret 我这样调用这个函数 push some var call inc 我想通过堆栈将参数传递给函数 所以我推送some var然后调
  • 如果输入较大的数字,R 金字塔图会非常慢

    我正在尝试用 R 制作金字塔图 我在互联网上找到了一个示例代码 可以实现我想要的功能 问题是我没有像示例中那样处理小数字 我的图的值为 3 000 000 到 12 000 000 但每边只有 10 个条形 尽管如此 创建具有较大数字的绘图
  • 在 .ear 文件中跨组件共享持久性单元

    在我使用 ear 打包的 Java EE 6 应用程序中 我想创建一个可以从不同 jar 文件中的组件访问的持久性单元 但是 我不确定如何定义这个持久性单元 使用 PersistenceContext 注释 仅当名称与本地 persiste
  • 为什么地图标记会在地图周围倾斜

    我在 Android Studio 中 有一个带有两个标记的地图片段 com google android gms maps SupportMapFragment 一种是静态的 称为目标 另一个跟踪我的行动 被称为猎人 它有效 但问题是猎人