在Android上使用GPS无法获得位置?

时间:2011-11-18 21:50:58

标签: 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

    }
}

1 个答案:

答案 0 :(得分: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();
                    }
                }   
        }