【问题标题】:How to get location information in background using fusedloaction api even when gps is turned off forcefully by the user?即使用户强行关闭gps,如何使用融合位置api在后台获取位置信息?
【发布时间】:2016-10-14 14:45:57
【问题描述】:

你好,我是 android 开发的新手,我需要在后台任务中每 15 分钟获取一次用户位置,因为我在 gps 关闭时使用 googleapiclient 获取位置更新如何使用融合 api 客户端获取位置更新有什么办法像ola cabs这样的应用程序如何使用任何人都可以帮助我让我发布我到目前为止尝试过的代码:

public class Locationlistener implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,LocationListener  {


    private Location mlocation; // location
    private double latitude; // latitude
    private double longitude; // longitude
    private GoogleApiClient mGAC;
    private Context mContext;
    public static final String TAG = "GPSresource";
    private FusedLocationProviderApi fusedLocationProviderApi;
    private LocationRequest locationRequest;

    public Locationlistener(Context c)
    {
        mContext = c;
        try {
            buildGoogleApiClient();
            mGAC.connect();
        }
        catch(Exception e)
        {
            Log.d(TAG,e.toString());
        }
    }

    protected synchronized void buildGoogleApiClient() {
        locationRequest = LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationRequest.setInterval(1);
        locationRequest.setFastestInterval(1);
        fusedLocationProviderApi = LocationServices.FusedLocationApi;
        mGAC = new GoogleApiClient.Builder(mContext)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
       }


    public double getLatitude(){
        if(mlocation != null){
            latitude = mlocation.getLatitude();
        }

        // return latitude
        return latitude;
    }

    /**
     * Function to get longitude
     * */
    public double getLongitude() {
        if (mlocation != null) {
            longitude = mlocation.getLongitude();
        }

        // return longitude
        return longitude;
    }

    public Location GetLocationBlocking() throws InterruptedException {



        //      String lat=String.valueOf(moCurrentLocation.getLatitude());
        //    String longt=String.valueOf(moCurrentLocation.getLongitude());
//        Toast.makeText(oContext,"Lat"+lat+"long"+longt,Toast.LENGTH_SHORT).show();
        return mlocation;

    }


    @Override
    public void onConnected(Bundle bundle) {
        if (mGAC != null) {

            Location oLocation = LocationServices.FusedLocationApi.getLastLocation(mGAC);
            mlocation = oLocation;
            getLatitude();
            getLongitude();
            if (oLocation != null){
              Log.d("lat",String.valueOf(mlocation.getLatitude()));
            Log.d("long",String.valueOf(mlocation.getLongitude()));
            }
            else{
                LocationServices.FusedLocationApi.requestLocationUpdates(mGAC, locationRequest, this);
        }   }}


    @Override
    public void onConnectionSuspended(int i) {

    }




    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }

    @Override
    public void onLocationChanged(Location location) {
        mlocation=location;
    }
}

如何在 gps 关闭的情况下使其正常工作,谢谢!

【问题讨论】:

    标签: java android gps


    【解决方案1】:

    试试

    PRIORITY_LOW_POWER

    而不是

    PRIORITY_HIGH_ACCURACY

    最后一个将尝试通过 GPS 使用网络位置。我不知道你在 Manifest.xml 中定义了什么,但如果你定义了

    ACCESS_FINE_LOCATION

    我会改成

    ACCESS_COARSE_LOCATION

    【讨论】:

    • 我已经定义了我需要的两个,比如如果 gps 可用获取 gps 位置或基于网络的位置如何做到这一点
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多