-1

我已经习惯manager.requestLocationUpdates("gps", 1000, 0, new LocationDetector());了每秒更新一次。但是这种方法永远不是触发onLocationChanged()方法。我已经多次运行我的应用程序,并且我还尝试等待长达 30 分钟以获取更新,但 Android 监视器上没有显示任何更新。我还仔细检查了我设备的 GPS 是否已打开。所以请告诉可能是什么问题?

代码:

public class LocationDetector implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        Log.d("GPS: ", location.getLatitude()+ ", " +location.getLongitude());
    }

输出: 在此处输入图像描述

4

2 回答 2

0

这是这个问题的副本,你也问过。在任何情况下,您都可以尝试使用GoogleAPIClient- 像这样:

    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(60000); // update every (1) minutes               
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient,locationRequest, yourLocationDetector );

googleApiClient 在某些辅助方法中实例化和连接的地方,如下所示:

/**
     * Helper method to connect the Google API Client
     */
    private void connectGoogleAPIClient() {
      googleApiClient = new GoogleApiClient.Builder(context)
                                .addApi(LocationServices.API)
                                .addConnectionCallbacks(this)
                                .addOnConnectionFailedListener(this)
                                .build();
      googleApiClient.connect();
    }

您还需要确保已添加权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

您的问题可能与此处讨论的问题有关- 因此,还请查看此处选择的答案,看看它是否对您的情况也没有帮助。

于 2016-05-08T18:34:42.203 回答
0

这是一个典型的位置请求应该是这样的:

注意:我有Activity一个参数,因为我从一个活动中调用它。它在我的实用程序类中。

public static void getLocation(Activity activity) {
    final LocationListener locationListener = new LocationListener() {
        @Override
        public void onProviderEnabled(String provider) {
            Log.i(TAG, "onProviderEnabled");
        }

        @Override
        public void onProviderDisabled(String provider) {
            Log.i(TAG, "onProviderDisabled");
        }

        @Override
        public void onLocationChanged(Location location) {
            Log.i(TAG, "onLocationChanged");
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            Log.i(TAG, "onStatusChanged");
        }
    };

    final LocationManager locationManager = (LocationManager) appContext.getSystemService(Context.LOCATION_SERVICE);
    final Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setCostAllowed(false);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setSpeedRequired(false);

    activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            locationManager.requestLocationUpdates(1000, 0, criteria, locationListener, null);
        }
    });
}

编辑:就像@ishmaelMakitla 说的,

确保拥有以下权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
于 2016-05-08T18:35:07.393 回答