在没有GPS的情况下在android中find当前位置

我想开发一个应用程序,如果我打开应用程序,它将显示我的设备的当前位置。 我想在不使用gps的情况下这样做。 我已经为它编写了代码。 但它会在打开地图时显示美国的位置。 我希望它能显示我目前的位置(即印度浦那)。 我如何获得近似正确的位置?

这是我的代码

protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); setContentView(R.layout.main); LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); LocationListener locListener = new LocationListener(){ public void onLocationChanged(Location loc) { loc.getLatitude(); loc.getLongitude(); String Text = "My current location is: " + "Latitud = " + loc.getLatitude() + "Longitud = " + loc.getLongitude(); Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show(); } 

你应该请求’ mlocManager ‘来定位,并设置它的监听器:

 public void getCurrentLocation() { if (mlocManager != null) { mlocManager .requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 0, 0, locListener ); mlocManager .requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locListener ); } } 

这是MyLocation Listener获取当前位置而不使用GPS,使用网络提供商

 public class MyLocationListener extends Service implements LocationListener { private static final String TAG = "MyLocationListener"; private Context context = null; private Location location = null; private LocationManager locationManager = null; boolean isNetworkEnabled = false; boolean canGetLocation = false; public double latitude = 0.0; public double longitude = 0.0; // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute public MyLocationListener(Context ctx) { Log.v(TAG + ".MyLocationListener", "MyLocationListener constructor called"); this.context = ctx; getLocationValue(); } public Location getLocationValue() { Log.v(TAG + ".getLocationValue", "getLocationValue method called"); try { locationManager = (LocationManager) context .getSystemService(LOCATION_SERVICE); isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (isNetworkEnabled) { // Toast.makeText(context, "Net", 1).show(); Log.v(TAG + ".getLocationValue", "Network provider enabled"); locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); Log.v(TAG, "Co-ordinates are: " + latitude + " "+ longitude); } } } else { showSettingsAlert(); } } catch (Exception e) { e.printStackTrace(); } return location; } /** * Stop using GPS listener Calling this function will stop using GPS in your * app * */ public void stopUsingGPS() { if (locationManager != null) { locationManager.removeUpdates(MyLocationListener.this); } } public double getLatitude() { if (location != null) { latitude = location.getLatitude(); } return latitude; } public double getLongitude() { if (location != null) { longitude = location.getLongitude(); } return longitude; } /** * Function to check GPS/wifi enabled * * @return boolean * */ public boolean canGetLocation() { return this.canGetLocation; } /** * Function to show settings alert dialog On pressing Settings button will * lauch Settings Options * */ public void showSettingsAlert() { AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); alertDialog.setTitle("GPS Settings"); alertDialog .setMessage("GPS is not enabled. Do you want to go to settings menu?"); alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS); context.startActivity(intent); } }); alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertDialog.show(); } @Override public void onLocationChanged(Location location) { } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public IBinder onBind(Intent intent) { return null; } } 

只要您需要以这种方式进行当前位置协调,就可以调用上面的代码

 MyLocationListener mylistner = new MyLocationListener(context); double lat = mylistner.latitude; double lon = mylistner.longitude; 

希望对你有帮助

我没有发现LocationListener有用,但需要将其放入以防止空指针。

 // Set the criteria of what to look for criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setPowerRequirement(Criteria.POWER_LOW); // This will find the location of the device via your network, but give user option to use GPS if needed String locationprovider = mlocManager.getBestProvider(criteria, true); mLoc = mlocManager.getLastKnownLocation(locationprovider); if (mLocation != null) { String Text = "My current location is: " + "Latitud = " + mLoc.getLatitude() + "Longitud = " + mLoc.getLongitude(); } else { String Text = "No location found." }