0

我正在使用此代码来获取我当前位置的纬度和经度......但应用程序有时会崩溃。在某些手机上,获取位置需要很长时间,而其他使用 gps 的应用程序在同一设备上可以更快地获取位置

package com.example.newproject;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager; 
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity implements LocationListener {
private TextView tv;
private static LocationManager locationMgr = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = (TextView)findViewById(R.id.textView1);
    locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
@Override
protected void onStop()
{
    super.onStop();
    try {
        locationMgr.removeUpdates(this);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    locationMgr = null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    tv.setText(""+location.getLatitude()+","+location.getLongitude());
}

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

}

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

}

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

}

}

4

3 回答 3

0

首先,您必须检查是否启用了位置提供程序,例如:

boolean networkProviderEnabled=locationMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
boolean gpsProviderEnabled=locationMgr.isProviderEnabled(LocationManager.GPS_PROVIDER);

其次,尝试也使用网络提供商来获得快速但不那么准确的位置,而不仅仅是 GPS 卫星。

很棒的教程在这里

于 2013-09-30T12:36:14.517 回答
0

锁定 GPS 卫星需要时间。您可以getLastKnownLocation在等待 GPS 锁定时使用,或者使用NETWORK_PROVIDER更快但不太精确的方法。

于 2013-09-30T12:37:30.353 回答
0

只是在黑暗中拍摄:API 常量中定义的位置提供程序不保证可用。我经历过这样的代码崩溃:

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

相反,请尝试使用 选择位置提供程序LocationManager.getBestProvider()。这将返回一个有效的位置提供者或 null,如果没有可用的,所以在请求位置更新之前测试 null。请参阅http://developer.android.com/reference/android/location/LocationManager.html#getBestProvider%28android.location.Criteria,%20boolean%29

如果由于某种原因您需要 GPS,请尝试以下代码:

if (mLocationManager.getAllProviders().indexOf(LocationManager.GPS_PROVIDER) >= 0) {
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
} else {
    Log.w("MainActivity", "No GPS location provider found. Location data will not be available.");
}
于 2013-09-30T13:01:51.667 回答