Android:没有locationListener的用户位置

时间:2011-09-03 19:08:57

标签: android locationlistener

我想知道是否可以在不使用LocationListener的情况下获取用户位置。

我问的原因是我的locationListener事件没有被调用。

public class LocationActivity extends Activity implements LocationListener{

    private LocationManager m_locationManager;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        LinearLayout content = new LinearLayout(this);
        content.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        content.setOrientation(LinearLayout.VERTICAL);
        content.setBackgroundColor(Color.TRANSPARENT);

        TextView infoLabel = new TextView(this);
        infoLabel.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        infoLabel.setTextSize(20.0f);
        infoLabel.setText("Initializing...");
        content.addView(infoLabel);

        try{
            m_locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

            String provider = null;

            if ( m_locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
                provider = LocationManager.GPS_PROVIDER ;
                Log.d("Unity", "Using GPS");
                m_locationManager.requestLocationUpdates(provider, 0, 0, this);
            } else if(m_locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
                provider = LocationManager.NETWORK_PROVIDER;
                Log.d("Unity", "Using Netword");
                m_locationManager.requestLocationUpdates(provider, 0, 0, this);
            } else {
                Log.d("Unity", "Provider Not available");
            }

        }catch(Exception ex){
            Log.d("Unity", "locatons error " + ex.getMessage());
        }

        setContentView(content);

    }

    public void onLocationChanged(Location location) {
        Log.d("Unity", "UserLocation Lat:" + location.getLatitude() + " Long:" + location.getLongitude());
    }
    public void onStatusChanged(String provider, int status, Bundle extras) {Log.d("Unity", "onStatusChanged");}
    public void onProviderEnabled(String provider) {Log.d("Unity", "onProviderEnabled");}
    public void onProviderDisabled(String provider) {Log.d("Unity", "onProviderDisabled");}
} 

有关详细信息,请参阅此帖子:

Android: Can't create handler inside thread that has not called Looper.prepare()

修改以反映mmeyer评论

1 个答案:

答案 0 :(得分:1)

首先,当您选择具有LocationManager.getLastKnownLocation(provider)的提供商时,您可以检查上一个已知位置,看看它是否为空且不太旧。

除此之外,您的代码看起来足够了。我怀疑问题可能是你对requestLocationUpdates的调用中的第3个参数说,如果位置变化超过100米,则仅发送更新。对于你在调试和观看logcat中运行的大多数情况,每秒移动一百米似乎不太可能。

来自API文档:

  

可以使用minTime和来控制通知的频率   minDistance参数。如果minTime大于0,则   LocationManager可能会休息minTime毫秒   位置更新之间以节省电力。 如果minDistance更大   如果设备移动,则只会广播位置,而不是0   mindistance米。要尽可能频繁地获取通知,   将两个参数都设置为0。