我已经阅读了很多关于 stackoverflow 的帖子,但我没有找到我需要的答案。使用 gps 或使用网络提供商查找我的位置非常简单,但是有一个问题。我的应用程序首先检查 gps 是否处于活动状态,如果没有,我将用户发送到 gps 选项页面。之后,用户可以返回第一个活动。我在此活动和第二个活动中使用当前位置。我只将监听器放在第一个活动中,并在函数“onLocationUpdate()”中将我的纬度和经度保存在我的全局应用程序变量中。如果我启动应用程序,然后我设置启用 gps,然后我打开我的第二个活动,纬度和经度等于 0.0,但如果我启动活动,然后我设置启用 gps,然后我等待 30 秒,它工作。是否存在一种消除这种延迟的方法?使用 Network_Provider 更快,但它不像 gps 那样精确!
代码片段是:
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean gpsStatus = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!gpsStatus) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
this);
alertDialogBuilder.setTitle("The GPS is off!");
alertDialogBuilder
.setMessage("Turn on the GPS?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
Intent intent1 = new Intent();
intent1.setClassName(
"com.android.settings",
"com.android.settings.SecuritySettings");
startActivity(intent1);
dialog.cancel();
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, locationListener);
这部分用于检查 gps 是否启用。是否存在无需进入设置页面即可启用 GPS 的方法?
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) { // update
if (location != null) {
msg_r.setLatitude(location.getLatitude());
msg_r.setLongitude(location.getLongitude());
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
这是我的听众。