android通过gps获取定位的位置数据和gps经纬度


在Android开发中,通过GPS获取定位的位置数据和经纬度通常涉及到使用`LocationManager`和`LocationListener`。以下是一个简化的示例代码,展示了如何在Android应用中实现这一功能。请注意,这只是一个基础示例,实际使用时可能需要根据具体需求进行调整。


import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class GPSTracker implements LocationListener {

    private final Context mContext;

    // 判断GPS是否可用
    boolean isGPSEnabled = false;

    // 位置管理器
    LocationManager locationManager;

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

    /** 检查位置服务是否开启 */
    public Location getLocation() {
        try {
            locationManager = (LocationManager) mContext
                    .getSystemService(Context.LOCATION_SERVICE);

            // 获取GPS状态
            isGPSEnabled = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);

            // 如果GPS启用,则获取最后的位置
            if (isGPSEnabled) {
                if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    // TODO: 考虑调用
                    //    ActivityCompat#requestPermissions
                    // 这里是权限未授予的处理,通常需要请求用户授权
                    return null;
                }
                locationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER,
                        0,
                        0, this);

                if (locationManager != null) {
                    Location location = locationManager
                            .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    return location;
                }
            }

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

        return null;
    }

    // LocationListener回调方法
    @Override
    public void onLocationChanged(Location location) {
        // 当位置改变时调用,这里可以处理新的位置信息
        if (location != null) {
            double latitude = location.getLatitude(); // 纬度
            double longitude = location.getLongitude(); // 经度
            // TODO: 在这里使用经纬度信息
            Toast.makeText(mContext, "Latitude: " + latitude + ", Longitude: " + longitude, Toast.LENGTH_SHORT).show();
        }
    }

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

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }
}

**注意**:

- 这个示例代码展示了如何设置一个`GPSTracker`类,该类实现了`LocationListener`接口以监听位置变化。

- 代码中包含了检查GPS是否启用的逻辑,以及请求位置更新的逻辑。

- 权限检查是必须的,因为从Android 6.0(API 级别 23)开始,用户需要在运行时授予位置权限。

- 在实际使用中,你需要处理权限请求的逻辑(示例代码中已用TODO标记),并在用户授予权限后重新尝试获取位置信息。

- 当位置改变时,`onLocationChanged`方法会被调用,你可以在这里处理新的位置信息,比如更新UI或发送数据到服务器。