Gps Location updates in android is not working

我只是一个虾纸丫 提交于 2019-12-13 08:51:17

问题


From Android official site I have downloaded Location services example & did run in the real device. Every time onLocationChanged method is returning Network's Latitude & Longitude but not accurate GPS location. How to achieve accurate GPS locations from the new android Location API.

Here is my service code

package com.example.locationservice;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.LocationClient;
import com.google.android.gms.location.LocationRequest;

public class MDFYLocationUpdate extends Service implements
LocationListener,
GooglePlayServicesClient.ConnectionCallbacks,
    GooglePlayServicesClient.OnConnectionFailedListener,
    com.google.android.gms.location.LocationListener {

 LocationClient mLocationClient;
    private LocationRequest mLocationRequest;
    public static Context c;
    final String BROADCAST_ACTION ="current_location";
    public static final String TAG="Location";
 // Milliseconds per second
    private static final int MILLISECONDS_PER_SECOND = 1000;
    // Update frequency in seconds
    public static final int UPDATE_INTERVAL_IN_SECONDS = 5;
    // Update frequency in milliseconds
    private static final long UPDATE_INTERVAL = 10000;
            //MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;
    // The fastest update frequency, in seconds
    private static final int FASTEST_INTERVAL_IN_SECONDS = 1;
    // A fast frequency ceiling in milliseconds
    private static final long FASTEST_INTERVAL =
            MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        mLocationRequest =LocationRequest.create();

                mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
        // Set the update interval to 5 seconds
        mLocationRequest.setInterval(UPDATE_INTERVAL);
        // Set the fastest update interval to 1 second
        mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
         servicesConnected();
        mLocationClient =new LocationClient(this, this, this);
    }
    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }


    @Override
    public void onConnected(Bundle connectionHint) {
        // TODO Auto-generated method stub

        Log.d(TAG, "onconnected");
        mLocationClient.requestLocationUpdates(mLocationRequest, this);
    }
    @Override
    public void onDisconnected() {
        // TODO Auto-generated method stub
        Log.d(TAG, "onsisconnect");
         // Destroy the current location client
        mLocationClient = null;
    }
    @Override
    public void onConnectionFailed(ConnectionResult result) {
        // TODO Auto-generated method stub

    }

     private boolean servicesConnected() {
        // Check that Google Play services is available
        int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        // If Google Play services is available
        if (ConnectionResult.SUCCESS == resultCode) {

        return true;
        } else {

        return false;
        }
        }

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        Log.d(TAG, "onLocationChanged");
        Log.d(TAG, "Lat = " + location.getLatitude() + " Lng = " + location.getLongitude());
        Logger.writeLog("Lat = " + location.getLatitude() + " Lng = " + location.getLongitude() + " == "+BasicDeviceInformation.getCurrentDate());

    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Log.d(TAG, "onStartCommand");
        mLocationClient.connect();
        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }
}

回答1:


Don't know if the user will be back on SO or not, so posting an answer on his behalf for others who faced this problem.

PS:- This answer was suggested by the user himself but was at the wrong place, so posting on his behalf.

UPDATE

I found the solution for this problem.... I missed the meta-data tag in the manifest.

Place below code in manifest inside the Application tag.

 <meta-data android:name="com.google.android.gms.version"
       android:value="@integer/google_play_services_version" />

After placing this one i am getting correct locations.

ISSUE IS CLOSED



来源:https://stackoverflow.com/questions/20639780/gps-location-updates-in-android-is-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!