在android中获取当前位置

问题描述:

我试过下面的代码,但没有获取当前位置。
当我手动设置模拟器控制位置,然后我得到这样的位置,但没有得到当前位置。我得到空位置。在android中获取当前位置

  • 如何获取当前位置?
  • 有没有其他方法可以获得当前位置?

这是我的代码:

package com.p; 
import android.app.Activity; 
import android.os.Bundle; 

import android.content.Context; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 

import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
    public class GooglemapActivity extends Activity implements LocationListener { 
    private TextView latituteField; 
    private TextView longitudeField; 
    private LocationManager locationManager; 
    private String provider; 
     EditText t; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 



     latituteField = (TextView) findViewById(R.id.TextView02); 
     longitudeField = (TextView) findViewById(R.id.TextView04); 

     // Get the location manager 
    locationManager =     (LocationManager)getSystemService(Context.LOCATION_SERVICE); 



    // Define the criteria how to select the locatioin provider -> use 
    // default 

      Criteria criteria = new Criteria(); 
      criteria.setAccuracy(Criteria.ACCURACY_FINE); 
      criteria.setAltitudeRequired(false);//true if required 
      criteria.setBearingRequired(false);//true if required 
      criteria.setCostAllowed(true); 
      criteria.setPowerRequirement(Criteria.POWER_LOW); 
      provider = locationManager.getBestProvider(criteria, true); 
      //provider=LocationManager.GPS_PROVIDER; 
     Location location = locationManager.getLastKnownLocation(provider); 
       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
      /*check provder*/boolean statusOfGPS =locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 


      if (statusOfGPS==true) { 
     // Initialize the location fields 
     if (location != null) { 
       System.out.println("Provider " + provider + " has been  selected."); 
        double lat = (double) (location.getLatitude()); 
        double lng = (double) (location.getLongitude()); 
        latituteField.setText(Double.toString(lat)); 
        longitudeField.setText(Double.toString(lng)); 
       } else { 
         latituteField.setText("Provider is not available"); 
         longitudeField.setText("Provider not available"); 
       } 


     } 
     else 
     { 

     latituteField.setText("eeeeeeeee"); 
     longitudeField.setText("rrrrrrrrr"); 

     } 
    } 

    /* Request updates at startup */ 
    @Override 
    protected void onResume() { 
     super.onResume(); 
    locationManager.requestLocationUpdates(provider, 400, 1, this); 
    } 

    /* Remove the locationlistener updates when Activity is paused */ 
    @Override 
    protected void onPause() { 
     super.onPause(); 
    locationManager.removeUpdates(this); 
    } 

    public void onLocationChanged(Location location) { 
      double lat = (double) (location.getLatitude()); 
     double lng = (double) (location.getLongitude()); 
     latituteField.setText(Double.toString(lat)); 
     longitudeField.setText(Double.toString(lng)); 
    } 

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

    } 

    public void onProviderEnabled(String provider) { 
     Toast.makeText(this, "Enabled new provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

    } 

    public void onProviderDisabled(String provider) { 
     Toast.makeText(this, "Disabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 
    } 
    } 

我在下面的manifest.xml添加权限:

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

模拟器中你不会得到当前的位置。你可以通过DDMS来设置它们,如果是模拟器,它们将成为你当前的位置。

+0

我得到的位置由我输入,但仍然没有得到当前位置 –

+0

表示您接受来自telnet或模拟器控制的经度和纬度?或者是其他东西? –

请不要试图获取最后一次知道的位置,大部分时间它是陈旧和无用的。改为设置locationListener并等待位置更新。这会让你获得你当前的位置。

您可以使用此代码开始列出GPS更新,并对您收到的数据进行处理。它还在日志文件中打印消息以便于调试。请注意,此功能不会返回任何结果,它只会开始收听GPS。结果将在稍后的// do something here with the new location data部分提供,届时您可以将它们保存在某个地方。

private void getGpsData() { 
    locationManager = (LocationManager) owner.getSystemService(Context.LOCATION_SERVICE); 

    locationListener = new LocationListener() { 
     public void onLocationChanged(Location location) { 
      Log.i(TAG, "location change:" + location.toString()); 

      String longitude = "Londitude: " + location.getLongitude(); 
      String latitude = "Latitude: " + location.getLatitude(); 

      if(location.hasAccuracy()) { // good enough? 
       // do something here with the new location data 
       .... 
       // 
       Log.i(TAG, "GPS listener done"); 
       locationManager.removeUpdates(this); // don't forget this to save battery 
      } 
     } 

     public void onStatusChanged(String provider, int status, Bundle extras) { 
      Log.i(TAG, provider + " status:" + status); 
     } 

     public void onProviderEnabled(String provider) { 
      Log.i(TAG, provider + " enabled"); 
     } 

     public void onProviderDisabled(String provider) { 
      Log.i(TAG, provider + " disabled"); 
     } 
    }; 
    Log.i(TAG,"GPS listener started"); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
}