gpt4 book ai didi

Android 最初使用网络提供商获取纬度和经度,然后使用 GPS

转载 作者:行者123 更新时间:2023-11-30 03:48:08 24 4
gpt4 key购买 nike

在我的应用程序中,我需要用户当前位置的纬度和经度值。最初我检查 GPS 坐标是否可用,如果不可用,我将使用网络提供商获取用户位置的这些经纬度值,因为获取 GPS 坐标非常耗时。一旦 GPS 坐标可用,我需要获得这些值。谷歌搜索了大约 2 天,我发现了一些有关该问题的信息,并设法构建了一些代码,如下所示。我被困住了,无法前进。

我的 Activity

public class MainActivity extends Activity {

double x, y;

Timer timer;
LocationManager lm;
boolean gps_enabled = false;
boolean network_enabled = false;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

if (!gps_enabled && !network_enabled) {
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "nothing is enabled",
duration);
toast.show();

}

if (gps_enabled)
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
locationListenerGps);
if (network_enabled)
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
locationListenerNetwork);
timer = new Timer();
timer.schedule(new GetLastLocation(), 20000);

}

LocationListener locationListenerGps = new LocationListener() {
public void onLocationChanged(Location location) {
timer.cancel();
x = location.getLatitude();
y = location.getLongitude();
lm.removeUpdates(this);
lm.removeUpdates(locationListenerNetwork);

Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context,
"gps enabled " + x + "\n" + y, duration);
toast.show();
}

public void onProviderDisabled(String provider) {
}

public void onProviderEnabled(String provider) {
}

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

LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
timer.cancel();
x = location.getLatitude();
y = location.getLongitude();
lm.removeUpdates(this);
lm.removeUpdates(locationListenerGps);

Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "network enabled" + x + "\n"
+ y, duration);
toast.show();
}

public void onProviderDisabled(String provider) {
}

public void onProviderEnabled(String provider) {
}

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

class GetLastLocation extends TimerTask {
@Override
public void run() {
lm.removeUpdates(locationListenerGps);
lm.removeUpdates(locationListenerNetwork);

Location net_loc = null, gps_loc = null;
if (gps_enabled)
gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
net_loc = lm
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

// if there are both values use the latest one
if (gps_loc != null && net_loc != null) {
if (gps_loc.getTime() > net_loc.getTime()) {
x = gps_loc.getLatitude();
y = gps_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "gps lastknown " + x
+ "\n" + y, duration);
toast.show();
} else {
x = net_loc.getLatitude();
y = net_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "network lastknown "
+ x + "\n" + y, duration);
toast.show();

}

}

if (gps_loc != null) {
{
x = gps_loc.getLatitude();
y = gps_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "gps lastknown " + x
+ "\n" + y, duration);
toast.show();
}

}
if (net_loc != null) {
{
x = net_loc.getLatitude();
y = net_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "network lastknown "
+ x + "\n" + y, duration);
toast.show();

}
}
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "no last know avilable",
duration);
toast.show();

}
}
}

到目前为止,使用上面的代码,我从网络提供商那里获得了经纬度值,但无法获得 GPS 坐标。我应该在上面的代码中添加或编辑什么来获取 GPS 坐标?

最佳答案

我发现 Android 开发人员指南非常有用:http://developer.android.com/guide/topics/location/strategies.html#BestEstimate

它说明了一个典型的程序流程应该是什么样子,以便使用不同的位置提供商获得最准确的用户位置。

关于Android 最初使用网络提供商获取纬度和经度,然后使用 GPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14622383/

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