gpt4 book ai didi

android - 如何在不等待 Android 位置更改的情况下获取当前 GPS 位置?

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:55 25 4
gpt4 key购买 nike

我想使用 gps 提供程序获取设备的当前位置,但这实际上是在等待 gps 位置发生变化。

所以我有一个简单的应用程序来监听位置变化。这适用于 NETWORK_PROVIDER 立即,但对于 GPS_PROVIDER 我等了 15 分钟,没有任何 Action 发生。

我使用的是 API 级别 8。

public class MainActivity extends Activity {
TextView tv;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) this.findViewById(R.id.textView1);
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener ll = new mylocationlistener();

//lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll); // this works fine
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
}

private class mylocationlistener implements LocationListener {
public void onLocationChanged(Location location) {
Date today = new Date();
Timestamp currentTimeStamp = new Timestamp(today.getTime());
if (location != null) {
Log.d("LOCATION CHANGED", location.getLatitude() + "");
Log.d("LOCATION CHANGED", location.getLongitude() + "");
String str = "\n CurrentLocation: " + "\n Latitude: "
+ location.getLatitude() + "\n Longitude: "
+ location.getLongitude() + "\n Accuracy: "
+ location.getAccuracy() + "\n CurrentTimeStamp "
+ currentTimeStamp + "\n Altitude: "
+ location.getAltitude() + "\n Bearing"
+ location.getBearing() + "\n Speed"
+ location.getSpeed() + "\n ";
Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG)
.show();
tv.append(str);
}
}

public void onProviderDisabled(String provider) {
Toast.makeText(MainActivity.this, "Error onProviderDisabled",
Toast.LENGTH_LONG).show();
}

public void onProviderEnabled(String provider) {
Toast.makeText(MainActivity.this, "onProviderEnabled",
Toast.LENGTH_LONG).show();
}

public void onStatusChanged(String provider, int status, Bundle extras) {
Toast.makeText(MainActivity.this, "onStatusChanged",
Toast.LENGTH_LONG).show();
}
}
}

我确实把许可放在了 list 中,所以这不是问题。

最佳答案

你在里面测试吗?除非你在外面,否则你可能根本无法获得 GPS 锁定,这意味着手机将尽可能频繁地尝试获得锁定(因为你在 requestLocationUpdates 调用中指定了 0 和 0 作为最小时间和距离).

不幸的是,您只需要等待设备获得 GPS 锁定,如果不是因为信号不足,您将继续等待。要缓解这种情况,您可以做的第一件事是尝试获取 GPS 提供商的最后已知位置。如果设备最近有 GPS 锁定并存储了一个位置,这将返回一个位置:

Location lastLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

除此之外,您应该尝试从网络提供商那里获取位置,因为正如您已经观察到的那样,这可能比 GPS 返回位置的速度快得多。这是因为位置数据来源丰富(手机信号塔和 WIFI),只要您有无线信号,这些数据随处可用,包括在室内。

关于android - 如何在不等待 Android 位置更改的情况下获取当前 GPS 位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13804481/

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