Android中的位置管理员

时间:2013-04-17 11:36:07

标签: android latitude-longitude locationmanager

我是android新手。但它没有返回纬度和经度值。我在模拟器中试过这个。我测试和onLocationChanged方法没有执行。我只需要获取当前位置的gps坐标

    final TextView tv1 = (TextView) findViewById(R.id.textView1);
    final TextView tv2 = (TextView) findViewById(R.id.textView2);
    LocationManager manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);


    LocationListener listener = new LocationListener() {

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

        }

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

        }

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

        }

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub

            //String kk = "wefewfwef";

            //tv1.setText(kk);
            if(location != null){

                latitude = location.getLatitude();
                longitude = location.getLongitude();

                int lat = (int) latitude;
                int longi  = (int) longitude;

                tv1.setText(lat);
                tv2.setText(longi);
            }


        }
    };

    manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);

}

1 个答案:

答案 0 :(得分:0)

试试这段代码。

public class GPSTracker extends Service implements LocationListener{

private Context context;
boolean isGPSEnabled = false;
boolean isNetworkEnabled = false;
boolean canGetLocation = false;

Location location;
double latitude,longitude;

LocationManager locationManager;
AlertDialogManager am = new AlertDialogManager();
public GPSTracker(Context context){
    this.context = context;
    getLocation();
}
private Location getLocation() {
    // TODO Auto-generated method stub
    try{
        locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);


        if (!isGPSEnabled && !isNetworkEnabled){

        } else {
            this.canGetLocation = true;

            if (isNetworkEnabled){

                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 3, this);

                if (locationManager != null){
                    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null){
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }

            if (isGPSEnabled){
                if (location == null){
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 3, this);
                    if (locationManager != null){
                        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null){
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            } else {
                showAlertDialog();
            }
        }
    }catch(Exception e){
        e.printStackTrace();
    }
    return location;
}


public void showAlertDialog(){
    am.showAlertDialog(GPSTracker.this, "GPS Setting", "Gps is not enabled. Do you want to enabled it ?", false);
}
public double getLatitude(){
    if (location != null){
        latitude = location.getLatitude();
    }

    return latitude;
}

public double getLongitude(){
    if (location != null){
        longitude = location.getLongitude();
    }

    return longitude;
}

public boolean canGetLocation(){
    return this.canGetLocation;
}
@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    if (location != null){
        this.location = location;
    }
}

@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

}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

}

在您的MainActivity中创建此类的对象,如下所示。

GPSTracker gps = new GPSTracker();
latitude = gps.getLatitude();
longitude = gps.getLongitude();

不要忘记在清单文件中取得许可。

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