GPS定位不会被改变的Andr​​oid [英] GPS Location not being changed android

查看:170
本文介绍了GPS定位不会被改变的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在写一个简单的应用程序,需要设置当前的GPS坐标,从假设A点,然后前往另一个B点,并检测它在B点,我能得到A点的坐标坐标没问题。我只是没有得到它在B点检测到的坐标,它会读取相同的坐标的那些点答:我已经安装了我的手机上的应用程序,我开车点之间的英里。我的清单文件中包含的位置每一个可能的权限。

I'm writing a simple app that needs to set the current GPS coordinates from let's say point A, then travel to another point B and have it detect the coordinates at point B. I am able to get point A coordinates no problem. I'm just not getting it to detect the coordinates at point B, it reads the same coordinates as the ones at point A. I've got the app installed on my phone, and I am driving a mile between points. My manifest file includes every possible permission for location.

下面是活动code。

Here is the activity code.

public class GPSTrackingActivity extends Activity {

Button btnShowLocation;
Button btnShowEndLocation;

// GPSTracker class
GPSTracker gps;

TextView tvIntialLocation;
TextView tvEndLocation;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    myDBHelper = new DataBaseHelper(GPSTrackingActivity.this);
    tvIntialLocation = (TextView)findViewById(R.id.tvIntialLocation);
    tvEndLocation = (TextView)findViewById(R.id.tvEndLocation);

    // create class object
    gps = new GPSTracker(GPSTrackingActivity.this);     


    btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
    btnShowEndLocation = (Button)findViewById(R.id.btnEndLocation);

    // show location button click event
    btnShowLocation.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            // check if GPS enabled
            if(gps.canGetLocation()){

                double latitude = gps.getLatitude();
                double longitude = gps.getLongitude();
                tvIntialLocation.setText("Start Location is - \nLat: " + latitude + "\nLong: " + longitude);

               }else{
                // can't get location
                // GPS or Network is not enabled
                // Ask user to enable GPS/network in settings
                gps.showSettingsAlert();
            }

        }
    });

 // show location button click event
    btnShowEndLocation.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            // check if GPS enabled
            if(gps.canGetLocation()){

                double latitude = gps.getLatitude();
                double longitude = gps.getLongitude();
                tvEndLocation.setText("End Location is - \nLat: " + latitude + "\nLong: " + longitude);

            }else{
                // can't get location
                // GPS or Network is not enabled
                // Ask user to enable GPS/network in settings
                gps.showSettingsAlert();
            }

        }
    });

}

}

下面是类建立GPS追踪器类。我不知道,如果onLocationChanged获取调用,我没有看到,当在我所驾驶的位置发生改变,任何吐司消息。

Here is the class setting up the GPS Tracker class. I am not sure if the onLocationChanged is getting called, I didn't see any Toast messages when the location changed while I was driving.

public class GPSTracker extends Service implements LocationListener {

private final Context mContext;

// flag for GPS status
boolean isGPSEnabled = false;

// flag for network status
boolean isNetworkEnabled = false;

// flag for GPS status
boolean canGetLocation = false;

Location location; // location
double latitude; // latitude
double longitude; // longitude

// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

// Declaring a Location Manager
protected LocationManager locationManager;

public GPSTracker(Context context) {
    this.mContext = context;
    getLocation();
}

public Location getLocation() {
    try {
        locationManager = (LocationManager) mContext
                .getSystemService(LOCATION_SERVICE);

        // getting GPS status
        isGPSEnabled = locationManager
                .isProviderEnabled(LocationManager.GPS_PROVIDER);

        // getting network status
        isNetworkEnabled = locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) {
            // no network provider is enabled
        } else {
            this.canGetLocation = true;
            // First get location from Network Provider
            if (isNetworkEnabled) {
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("Network", "Network");
                if (locationManager != null) {
                    location = locationManager
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();

                    }
                }
            }
            // if GPS Enabled get lat/long using GPS Services
            if (isGPSEnabled) {
                if (location == null) {
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("GPS Enabled", "GPS Enabled");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return location;
}


/**
 * Function to get latitude
 * */
public double getLatitude(){
    if(location != null){
        latitude = location.getLatitude();
    }

    // return latitude
    return latitude;
}

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

    // return longitude
    return longitude;
}

/**
 * Function to check GPS/wifi enabled
 * @return boolean
 * */
public boolean canGetLocation() {
    return this.canGetLocation;
}


@Override
public void onLocationChanged(Location location) {
    location = getLocation();
    // Testing onLocationChanged:
    String hej1 = Double.toString(location.getLatitude());
    String hej2 = Double.toString(location.getLongitude());
    Toast.makeText(this, "Location: "+"Lat: " + hej1 + "Long: " + hej2,
            Toast.LENGTH_LONG).show();
}

/**
 * Function to show settings alert dialog
 * On pressing Settings button will lauch Settings Options
 * */
public void showSettingsAlert(){
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

    // Setting Dialog Title
    alertDialog.setTitle("GPS is settings");

    // Setting Dialog Message
    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");

    // On pressing Settings button
    alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int which) {
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            mContext.startActivity(intent);
        }
    });

    // on pressing cancel button
    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
        }
    });

    // Showing Alert Message
    alertDialog.show();
}

}

为什么第二点不被更新为当前的位置?开始和结束点显示为相同的GPS坐标。

Why is the second point not being updated to the current location? Start and End points show as the same GPS coordinates.

推荐答案

更改 onLocationChanged 以低于

    @Override
    public void onLocationChanged(Location location) {
        this.location = location;
        // Testing onLocationChanged:
        String hej1 = Double.toString(location.getLatitude());
        String hej2 = Double.toString(location.getLongitude());
        Toast.makeText(this, "Location: "+"Lat: " + hej1 + "Long: " + hej2,
            Toast.LENGTH_LONG).show();
    }

您应该preFIX类成员是 M 例如位置mLocation

You should prefix class members with m for example Location mLocation;

这篇关于GPS定位不会被改变的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆