【问题标题】:osmdroid - Cannot Access Current Location.osmdroid - 无法访问当前位置。
【发布时间】:2018-01-09 19:28:19
【问题描述】:

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

主要活动:

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" />

【问题讨论】:

    标签: android osmdroid


    【解决方案1】:

    几周前我最终解决了这个问题。我没有正确地从设备获得权限。就像我没有明确要求设备允许使用位置一样。我将在此处发布用于解决此问题的代码。

    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 社区拼凑出来的,因此感谢任何帮助我解答其他问题的人!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        相关资源
        最近更新 更多