1

Android デバイスでユーザーの位置を取得しようとしています。プログラムは、GPS の使用可能性をチェックします。GPSProvider が無効になっている場合、ユーザーに警告します。ユーザーが GPS を有効にしない場合は、プログラムで networkProvider をチェックします。

ネットワークプロバイダーをチェックするためのコード、

public boolean askNetworkProvider(){

    if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        AlertDialog builder = new AlertDialog.Builder(context)
                .setMessage("Enable Network Connection")
                .setTitle("Warning!")
                .setCancelable(true)
                .setPositiveButton("OK", new OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        return;
                    }
                } ).show();
    }

    if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){

         locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000, 0, networkListener);
         mlocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
         Log.i(LocationService.class.getName(),"Network Enable!!");
         return true;

     }
    return false;
}

wifiとモバイル接続が無効になっているにもかかわらず、networkProviderが有効であると表示され、2番目のifステートメントを入力します。しかし、それは偽であるべきです。どうすれば修正できますか?

4

5 に答える 5

1

新しい Android 4.3 (API レベル 18 以上) とそれを使用するデバイスには、高度な WiFi 設定があります: "常にスキャン可能"。チェックボックスがオンになっている場合、デバイスは WiFi がオフになっていても WLAN と場所をスキャンできるため、2 番目の if ステートメントを入力する可能性が高くなります。これをプログラムで修正するには、ビルド バージョン チェック (およびおそらくその他の設定チェック) を if ステートメントに追加します。(そして、その場合にどのように動作させるかを定義する必要があります。)簡単な手動の回避策は、もちろん設定を無効にすることです。たとえば、Nexus 7 では、[設定] -> [WiFi] -> [詳細設定] -> [常にスキャンを利用可能] のチェックを外します。

于 2013-10-24T15:03:42.697 に答える
0

GPS には googlePlay SDK を使用する方がよいと思います。

ばかげたバグなしで魅力的に機能しています。あなたのコードを googlePlay sdk に変更しました。これは私のユーザーにとって完璧です。(文句なし)

于 2013-10-24T12:47:49.460 に答える
0

「有効」があなたの考えを意味するとは思いません。確認しているのは、ユーザーが電話で位置情報プロバイダーを使用することを許可しているかどうか、つまり位置情報サービスが Wi-Fi 経由で位置情報を取得できるようになっているかどうかを確認することだけです。これは、NetworkProviderが結果を返すことに成功する、または成功することを意味するのではなく、ユーザーがアクセスを許可しただけです。

問題は、LocationManager「更新に失敗しました」という応答がないことです。パラメータ内でユーザーの場所が変更された場合にのみ通知されます。そうでない場合は、それについてできることはあまりありません。

GooglePlayServices を使用して位置情報を取得し、Play サービスが利用できない場合やエラーが返された場合のバックアップとして、標準のロケーション マネージャーに切り替える方が簡単であることがわかりました。これを行う方法については、こちらを参照してください。Android 開発者ブログには、利用可能な場合は Google Play を使用し、利用できない場合は通常のロケーション マネージャーに切り替える 2 つのアプローチを組み合わせる方法を示す 素晴らしい投稿もあります。

于 2013-10-24T12:48:20.847 に答える
0

Google は、融合された位置情報実装で位置ロジックを更新しました。このサンプルは興味深いものだと思います。位置情報の更新を取得している間、どのプロバイダーが有効かどうかを定義する必要はありません。 http://www.kpbird.com/2013/06/fused-location-provider-example.html?m=1
編集: これはあなたの質問に対する回答ではありませんが、私の意見では、融合された場所の実装は場所のベスト プラクティスです。聞いている。融合された場所に場所のリッスン構造を実装してください。

于 2013-10-24T15:32:24.340 に答える