0

我已经阅读了很多关于 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) {
    }
};

这是我的听众。

4

2 回答 2

2

您应该阅读 Reto Meier 关于构建基于位置的应用程序的文章:

  1. 如何构建不糟糕的基于位置的应用程序
  2. 深入了解位置
  3. 深入了解位置第 2 部分
于 2012-06-12T15:40:54.060 回答
1

GPS 需要时间来获取您当前的位置。没有办法解决它。getLastKnownLocation()如果您希望它更快,或者像您说的那样您可以使用网络提供商,您可以使用该方法。然而,最后一个已知位置可能根本不准确。

GPS 直到第一次调用时才准备好onLocationUpdate()。因此,您可以让用户停留在第一个活动上,直到此事件发生,然后允许用户转到第二个活动。或者让第二个活动获取位置更新。你可以做不同的事情。

至于在不进入设置页面的情况下启用 GPS,你不能。我找不到问题,但 CommonsWare 几个小时前刚刚回答了这个问题,指出这不可能发生,因为这是一个隐私问题。

于 2012-06-12T15:40:51.627 回答