在我的代码中加载布局时,它会获取gps坐标。这是我的示例代码。如果GPS关闭,它可以正常工作。如果我打开gps它没有加载gps坐标。我需要在打开GPS时获得用户gps坐标。那有什么问题呢。我需要改变的地方。抱歉我的英文。
dialog = new ProgressDialog(FXPage.this);
dialog.show();
dialog.setMessage("Getting Coordinates");
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 100000000,
1, this);
} else if (locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 100000000,
1, this);
}
else {
dialog.dismiss();
Toast.makeText(getApplicationContext(), "Enable Location", Toast.LENGTH_LONG).show();
}
protected void refresh() {
super.onResume();
this.recreate();
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
dialog.show();
latitude = location.getLatitude();
longitude =location.getLongitude();
if (latitude != 0 && longitude != 0){
edittext6.setText(location.getLatitude()+","+location.getLongitude());
dialog.dismiss();
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
答案 0 :(得分:0)
要避免上述所有问题,您可能只想使用FusedLocation Api,它比以前的LocationApi更好用。 查看FusedLocation api的this链接。
答案 1 :(得分:0)
这部分代码似乎很奇怪:
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
dialog.show();
latitude = location.getLatitude();
longitude =location.getLongitude();
if (latitude != 0 && longitude != 0){
edittext6.setText(location.getLatitude()+","+location.getLongitude());
dialog.dismiss();
}
}
基本上您正在显示然后立即解除对话框。也许你应该在显示坐标后使用计时器来关闭对话框。
以下是获得单个位置更新的一些好建议。
首先检查GPS是否已启用,这将使您的工作流程更加强大:
final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
private void buildAlertMessageNoGps() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
dialog.cancel();
}
});
final AlertDialog alert = builder.create();
alert.show();
}
然后在向 LocationManager 询问新的位置更新之前,我会检查是否有足够好的“最后已知位置”(这显然取决于您需要的精度)。 例如,您可以遍历每个位置提供程序以查找最及时和准确的最后已知位置,如下所示:
List<String> matchingProviders = locationManager.getAllProviders();
for (String provider: matchingProviders) {
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
float accuracy = location.getAccuracy();
long time = location.getTime();
if ((time > minTime && accuracy < bestAccuracy)) {
bestResult = location;
bestAccuracy = accuracy;
bestTime = time;
}
else if (time < minTime &&
bestAccuracy == Float.MAX_VALUE && time > bestTime){
bestResult = location;
bestTime = time;
}
}
}
如果上一个已知位置不够新,您可以使用最快的位置提供商请求单个位置更新:
if (locationListener != null &&
(bestTime < maxTime || bestAccuracy > maxDistance)) {
IntentFilter locIntentFilter = new IntentFilter(SINGLE_LOCATION_UPDATE_ACTION);
context.registerReceiver(singleUpdateReceiver, locIntentFilter);
locationManager.requestSingleUpdate(criteria, singleUpatePI);
}
显然,您需要配置 BroadcastReceiver :
protected BroadcastReceiver singleUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
context.unregisterReceiver(singleUpdateReceiver);
String key = LocationManager.KEY_LOCATION_CHANGED;
Location location = (Location)intent.getExtras().get(key);
if (locationListener != null && location != null)
locationListener.onLocationChanged(location);
locationManager.removeUpdates(singleUpatePI);
}
};