2011-11-18 75 views
2

这是我的代码。我试图使用GPS获取我的位置,它返回经度和纬度,但我要求返回的地址列表不会返回。我该怎么办 ?无法获取可能在android位置使用GPS吗?

有没有人有一个最佳更新的方法在android来获取我的位置使用GPS?

package com.locDetermine; 

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

import android.app.Activity; 
import android.content.Context; 
import android.location.Address; 
import android.location.Geocoder; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 
import android.widget.Toast; 

public class LocDetermineActivity extends Activity implements LocationListener{ 
    /** Called when the activity is first created. */ 

    LocationManager locationManager = null; 
    Location location = null; 
    TextView tvLocation ; 
    Geocoder geo ; 

    //GeoPoint point ; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     tvLocation = (TextView) findViewById(R.id.tv_loc); 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 10, this); 



    } 

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

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

     geo = new Geocoder(getApplicationContext(), Locale.getDefault()); 
     //tvLocation.setText("Location change : Latitude :"+latitude+"Longitude :"+longitude); 
     location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

     if(location != null) { 
      Toast.makeText(getApplicationContext(), "Location found", Toast.LENGTH_LONG).show(); 
      try { 
       List<Address> addresses = geo.getFromLocation(latitude, longitude, 5); 
       String add = ""; 
       if(addresses.size() > 0) { 
        for(int i =0; i<addresses.get(0).getMaxAddressLineIndex(); i++) 
         add += addresses.get(0).getAddressLine(i);  
       } 
       tvLocation.append("\n"+add); 
      } catch (IOException e) { 
       Log.e("Where u !", "Didn't get it!",e); 
      } 
     } 
     else 
       Toast.makeText(getApplicationContext(), "Location not found", Toast.LENGTH_LONG).show(); 

    } 

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

    } 

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

    } 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
     // TODO Auto-generated method stub 

    } 
} 
+0

一些方法在这里:http://stackoverflow.com/questions/1513485/how-do-i-get-the-current-gps-location-programmatically-in-android – nmagerko

回答

1

这是我如何做到这一点:

public void getAddress(final Context context, final Handler handler) { 

      (geoCodThread = new Thread() { 


    @Override public void run() { 
         Geocoder geocoder = new Geocoder(context, Locale.getDefault()); 
         String result = null; 
         try { 
          List<Address> list = geocoder.getFromLocation(
            Latit, Longit, 1); 
//I previously defigned Latit and Longit in my location change listner 
          if (list != null && list.size() > 0) { 
           address = list.get(0); 
           // sending back first address line and locality 
           result = address.getAddressLine(0) + ", " + address.getLocality(); 
          } 
         } catch (IOException e) { 
          //Log.e(tag, e.getMessage()); 
         } catch (Exception e) { 
          //Log.e(tag, e.getMessage()); 
          } 
          finally { 


          Message msg = Message.obtain(); 
          msg.setTarget(handler); 



     if (result != null) { 
            msg.what = 1; 
            Bundle bundle = new Bundle(); 
            bundle.putString("address", result); 
            msg.setData(bundle); 
            msg.sendToTarget(); 
            //Log.i(tag, "ADDRESS: "+ result); 
           } else { 
            msg.what = 0; 
           msg.sendToTarget(); 
           xb.setLength(0); 
           xb.append("Unable to obtain address"); 

          //Log.i(tag, "ADDRESS result is null"); 
         } 
          } 
        } 
       }).start(); 
      } // finished getting address from GPS 

在我的应用程序,我其实只是发在我展示msg.sendToTarget()以上的短信,所以我不知道如果整个处理程序部分作品,但它应该。

private class GeocoderHandler extends Handler { 
       @Override 
       public void handleMessage(Message message) { 
       try { String result; 
        switch (message.what) { 
        case 1: 
         Bundle bundle = message.getData(); 
         result = bundle.getString("address"); 
         break; 
        default: 
         result = null; 
        } 
    //    logger3.append(result); 
        editor.commit(); 

        } 
        finally {if (geoCodThread.isAlive()) 
        geoCodThread.interrupt(); 
        //finishFinding(); 
        } 
       } 
     }