我正在使用此代码获取当前位置的纬度和经度...但应用程序有时会崩溃。在某些手机上,获取该位置需要很长时间,而使用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
}
}
答案 0 :(得分:0)
首先,您必须检查位置提供程序是否已启用,例如:
boolean networkProviderEnabled=locationMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
boolean gpsProviderEnabled=locationMgr.isProviderEnabled(LocationManager.GPS_PROVIDER);
其次,尝试使用网络提供商快速但不那么准确的位置,而不仅仅是GPS卫星。
很棒的教程here。
答案 1 :(得分:0)
锁定GPS卫星需要时间。您可以在等待GPS锁定时使用getLastKnownLocation
,或使用更快但不太精确的NETWORK_PROVIDER
。
答案 2 :(得分: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.");
}