0

それについては、stackoverflow に関する多くの投稿を読みましたが、必要な答えが見つかりませんでした。GPS やネットワーク プロバイダーを使用すると、自分の位置を簡単に見つけることができますが、問題があります。私のアプリは最初にGPSがアクティブかどうかを確認し、そうでない場合はユーザーをGPSオプションページに送ります。その後、ユーザーは最初のアクティビティに戻ることができます。このアクティビティと 2 番目のアクティビティで現在地を使用します。最初のアクティビティと関数 "onLocationUpdate()" にのみリスナーを配置し、緯度と経度をグローバル アプリケーション変数に保存します。アプリを起動して GPS を有効に設定し、2 番目のアクティビティを開くと、緯度と経度は 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()。したがって、このイベントが発生するまでユーザーを最初のアクティビティにとどめ、その後、ユーザーが 2 番目のアクティビティに移動できるようにすることができます。または、2 番目のアクティビティで位置情報の更新を取得します。できることはさまざまです。

設定ページに行かずに GPS を有効にすることはできません。質問が見つかりませんが、CommonsWare は数時間前にこの質問に回答したばかりで、これはプライバシーの問題であるため発生しないと述べています。

于 2012-06-12T15:40:51.627 に答える