osmdroid - 无法访问当前位置。

osmdroid - Cannot Access Current Location.

我正在开发一个使用 osmdroid 的应用程序,我目前正试图在地图上仅显示当前用户位置。我没有设置标记来实际标记当前位置的位置,主要是因为我认为我采用的任何方法都没有真正奏效。以下是我最近从以下问题 (Question code is from) 中得出的尝试。使用调试器我可以看到它无法触发 运行() 方法中的内容。当我单步执行代码时,它似乎只是跳过了这些行。任何人都可以在这里提供任何帮助吗?我必须明确调用 运行 吗?我认为 运行OnFirstFix 的目的,但也许我错了。谢谢!

主要Activity:

GpsMyLocationProvider provider = new GpsMyLocationProvider(this);
    provider.addLocationSource(LocationManager.NETWORK_PROVIDER);
    locationOverlay = new MyLocationNewOverlay(provider, map);
    locationOverlay.enableFollowLocation();
    locationOverlay.runOnFirstFix(new Runnable() {
        public void run() {
            Log.d("MyTag", String.format("First location fix: %s", locationOverlay.getLastFix()));
            mapController.animateTo(locationOverlay.getMyLocation());
        }
    });

    map.getOverlayManager().add(locationOverlay);
map.invalidate();
}

public void onResume(){
    super.onResume();
    Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this));
    locationOverlay.enableMyLocation();
}

Android 清单:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-feature
    android:name="android.hardware.location.network"
    android:required="false" />
<uses-feature
    android:name="android.hardware.location.gps"
    android:required="false" />
<uses-feature
    android:name="android.hardware.telephony"
    android:required="false" />
<uses-feature
    android:name="android.hardware.wifi"
    android:required="false" />

运行时权限设置?这是文档:您将需要位置和可能的外部存储。https://developer.android.com/training/permissions/requesting.html

几周前我终于解决了这个问题。我没有正确地从设备获得权限。正如我没有明确要求设备允许使用位置。我将 post 用于解决此问题的代码。

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {
        // Check Permissions Now
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
        } else {
        Log.d("Location", "Location Permissions granted");
        locationListener = new MyLocationListener();
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        }

我可能是从 Stack Overflow 上的社区拼凑出来的,所以感谢所有帮助我回答其他问题的人!