谷歌地图api没有在好位置放置标记

The*_*zer 6 java android google-maps overlay geolocation

我的代码应该找出用户位置,并在进入应用程序时在地图上放置标记.我的位置值始终等于null,并且永远不会收到值.

if (location != null) {
                lat = (int) (location.getLatitude() * 1E6);
                longi = (int) (location.getLongitude() * 1E6);
                GeoPoint ourLocation = new GeoPoint(lat, longi);
                OverlayItem overlayItem = new OverlayItem(ourLocation, "AYO",
                        "Whats good yo");
                CustomPinpoint custom = new CustomPinpoint(d, CampusMap.this);
                custom.insertPinpoint(overlayItem);
                overlayList.add(custom);

            } else {
                Toast.makeText(CampusMap.this, "Couldn't get provider",
                        Toast.LENGTH_SHORT).show();

            }

        }
Run Code Online (Sandbox Code Playgroud)

Cru*_*ceo 1

我在制作 GPS RPG 时也遇到过类似的问题,以下是我注意到的一些事情:

首先,最初可能需要一段时间才能找到您的位置,这会导致该问题,因为您只检查位置是否为空。

您可能还想在执行任何操作之前确保设备的位置服务确实已启用:

private boolean doLocationsCheck(){
    if(!checkLocationEnabled()){

        final CharSequence[] items = {"Yes", "No"};

        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        builder.setCancelable(false);
        builder.setTitle("Location must be enabled to play this game! Would you like to enable it now?");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                final int i = item;
                runOnUiThread(new Runnable() {
                    public void run() {                         
                        if(i == 0){
                            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                            startActivity(intent);
                            quit();
                        }
                        else{
                            quit();
                        }

                    }
                });
            }


        }).show();
        AlertDialog alert = builder.create();

        return false;

    }
    else {
        return true;
    }
}

private boolean checkLocationEnabled(){

    LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
    boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER) || service.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    return enabled;
}
Run Code Online (Sandbox Code Playgroud)

在确保提供程序可用后,我设置了一个连接,如下所示:

    private void setupLocation() {

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

    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(final Location location) {
            runOnUiThread(new Runnable() {
                public void run() {
                    mLocation = location;
                    //Log.d(TAG, "Latitude: " + location.getLatitude() + " - Longitude: " + location.getLongitude());

                    saveLocation();
                }
            });   
        }

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

        public void onProviderEnabled(String provider) {}

        public void onProviderDisabled(String provider) {}
    };

            //Can set to GPS or network, whichever is available
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
Run Code Online (Sandbox Code Playgroud)

每当更新时,该位置都会设置在全局变量中,然后保存到首选项中。这样,如果提供程序已启用,但需要一段时间才能检索位置,用户仍然可以使用应用程序存储的最后已知位置继续使用应用程序(不适用于第一次使用该程序)正在运行)。

我知道我遗漏了很多东西,但我认为这并不是真正必要的,因为它要么是不言自明的,要么已经在之前的答案中解释过。

干杯~