【问题标题】:onLocationChanged not being called in Android Java在 Android Java 中未调用 onLocationChanged
【发布时间】:2017-01-23 23:04:54
【问题描述】:

三个月前我的代码运行良好,但现在无法运行。正是onLocationChanged 没有被调用,我不知道为什么。我已经3个月没有改变任何东西。另外,当我想在地图上显示标记时,它不存在。我拥有我需要的所有许可。下面有一段Java(Android)代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map_demo_activity);

        new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.US));

        OnClickListener();

        mapFragment = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map));
        if (mapFragment != null) {
            mapFragment.getMapAsync(new OnMapReadyCallback() {
                @Override
                public void onMapReady(GoogleMap map) {
                    loadMap(map);
                }
            });
        } else {
            Toast.makeText(this, "Error - Map Fragment was null!!", Toast.LENGTH_SHORT).show();
        }

        Marker("50.06465", "19.94498", "Example");

    }


    public void onLocationChanged(Location location) {

    mLAT = Double.toString(location.getLatitude());
    mLON = Double.toString(location.getLongitude());

    new DoIt().execute();

}

    public void Marker(String LAT, String LON, String tit) {

    double dLAT = Double.parseDouble(LAT);
    double dLON = Double.parseDouble(LON);

    LatLng pos = new LatLng(dLAT, dLON);

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        return;
    }

    map.setMyLocationEnabled(true);

    singleMarker = map.addMarker(new MarkerOptions()
            .title(tit)
            .position(pos)
            .icon(BitmapDescriptorFactory.fromResource(R.mipmap.icon));

}

【问题讨论】:

  • 可能您的手机已禁用精细定位
  • 什么类包含这段代码?请编辑您的问题以显示这一点。

标签: java android marker


【解决方案1】:

您缺少几行关键代码:

  1. 您的活动必须实现LocationListener

    class MyActivity implements LocationListener
    
  2. 你应该在onLocationChanged()上使用@Override注解:

    @Override
    public void onLocationChanged(Location location) {
    
  3. 你需要通过调用requestLocationUpdates()注册你的监听器:

    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
    

    这一步对于告诉 Android 系统调用您的 onLocationChanged() 方法至关重要。

有关详细信息,请参阅 Android 开发人员指南中的 Location Strategies

【讨论】:

  • 当我实现第三点时,我收到一个类似“无法解析方法请求位置更新”的错误,并且应用程序崩溃了。
  • @Zyngi 请发布一个新问题。请务必包含所有相关代码和错误消息。
  • @Code-Apprentice 如何在片段中实现这个?我问这个是因为 requestLocationUpdates() 显示错误为“无法解析方法'requestLocationUpdates(java.lang.String, int, int, driver.arcreloaded.cogzidel.com.arcnereloaded_driver.Map_Fragment)”
  • @RageshDAntony 你应该发布你自己的问题。阅读How to Ask 获取一些提示,以编写一个可以吸引您正在寻找的答案的好问题。请务必包含minimal reproducible example
猜你喜欢
  • 2016-12-08
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2017-08-09
  • 1970-01-01
相关资源
最近更新 更多