gpt4 book ai didi

android - 如何在所有条件下(在乡村和城市)准确快速地获取 GPS 坐标

转载 作者:行者123 更新时间:2023-11-29 01:44:58 25 4
gpt4 key购买 nike

我是 android 的新手,我正在使用一个在城市和乡村捕获 GPS 的应用程序,在城市我的代码工作正常,但在乡村我没有得到。可以请任何解决方案。我需要的是我应该获得精确的 GPS 坐标(即 GPS_PROVIDER 而不是网络提供商)

我用过的代码:
当我点击捕获 GPS 按钮时,我正在调用 gpsFinding()

// gps code new

public void gpsFinding() {
loc = null;
turnGPSOn();
progressBar = new ProgressDialog(this);
progressBar
.setMessage("Please Wait!...Searching for GPS Coordinates...");
progressBar.setCancelable(false);
progressBar.setOnDismissListener(this);
progressBar.show();
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
listener = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,// network
// provider,GPS_PROVIDER
1000, 0, listener);
startThread();

}

public void startThread() {
cnt = 0;
new Thread() {
public void run() {
while (cnt != 20) {
try {
Thread.sleep(1000);
cnt++;
System.out.println("waiting...");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
progressBar.dismiss();
}
}.start();
}

private class MyLocationListener implements LocationListener {

public void onLocationChanged(Location location) {
if (location != null) {
loc = location;
gpsData = loc.getLatitude() + "-" + loc.getLongitude();

double lati, longi;

lati = loc.getLatitude();
longi = loc.getLongitude();

String displayGps = " Latitude : " + lati + " , Longitude : "
+ longi;
tv_ex_gps.setText(displayGps);

Helper.GPS = gpsData.trim();

btn_save.requestFocus();
btn_save.requestFocusFromTouch();
// tv_gpsLati.setText("Latitude : " +
// displayGps.trim().split("\\,")[0]);
// tv_gpsLongi.setText("Longitude : " +
// displayGps.trim().split("\\,")[1]);

// Toast.makeText(TrackAssetCode.this,
// "Co-ordinates are received.", 5000).show();
locationManager.removeUpdates(listener);
location = null;
turnGPSOff();
progressBar.dismiss();
} else {
}
}

public void onProviderDisabled(String provider) {
}

public void onProviderEnabled(String provider) {
}

public void onStatusChanged(String provider, int status, Bundle extras) {
}
}

private void turnGPSOn() {

String provider = Settings.Secure.getString(getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if (!provider.contains("gps")) { // if gps is disabled
final Intent poke = new Intent();
poke.setClassName("com.android.settings",
"com.android.settings.widget.SettingsAppWidgetProvider");
poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
poke.setData(Uri.parse("3"));
sendBroadcast(poke);
}
}

private void turnGPSOff() {
System.out.println("We are in Off");
String provider = Settings.Secure.getString(getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

if (provider.contains("gps")) { // if gps is enabled
final Intent poke = new Intent();
poke.setClassName("com.android.settings",
"com.android.settings.widget.SettingsAppWidgetProvider");
poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
poke.setData(Uri.parse("3"));
sendBroadcast(poke);
}
}

@Override
public void onDismiss(DialogInterface dialog) {
if (gpsData.length() == 0)
showGPSAlert();
}

public void showGPSAlert() {
b = new AlertDialog.Builder(Existing_Kiosk.this);
b.setTitle("Message");
b.setMessage("GPS Co-ordinates not received yet. Do you want wait some more time ?");
b.setIcon(android.R.drawable.ic_dialog_info);
b.setCancelable(false);
b.setPositiveButton("Continue", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
progressBar = new ProgressDialog(Existing_Kiosk.this);
progressBar
.setMessage("Please Wait!...Searching for GPS Coordinates...");
progressBar.setCancelable(false);
progressBar.setOnDismissListener(Existing_Kiosk.this);
progressBar.show();
startThread();
}
});
b.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
turnGPSOff();
// btn_traastCod_gps.setEnabled(true);
}
});
b.show();

}

最佳答案

GPS(或更准确地说是 GNSS)是唯一提供精确位置的系统。因此,您独家使用 GPS 提供商的方法是正确的。

但是:您需要自由观看天空。
因此它不能在室内工作。
在树林里效果不好。
可以自由观看天空预计必须等待 20 - 40 秒才能获得第一个有效位置。它是城市峡谷,天空视野不好,第一个有效坐标可能需要更长的时间。但你什么也做不了,你无法改善它。 (您可能会在进入车辆之前等待位置)。在您的应用中考虑在具有良好 GPS 时显示,以便用户有反馈。

您的代码不应限制为 20 秒,重新安排您的代码,不要等待 GPS,而是在收到有效位置后将状态切换为 haveGPS=true。

关于android - 如何在所有条件下(在乡村和城市)准确快速地获取 GPS 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22032794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com