4

Android では、アラーム マネージャーを使用して GPS で 30 秒ごとに位置情報を取得しています。デバイスが移動中であるか、ジオポイントを使用して同じ場所に存在するかを検出したいと考えています。デバイスが同じ場所にある場合、GPS が正確なデータを取得している場合、地図に表示されている正確な場所から 20 または 30 メートル離れた場所でおおよそのデータを取得している場合があります。

そのため、デバイスの移動を見つける際に問題が発生しています。

デバイスが移動していないことを確認する方法は?

4

4 に答える 4

9

Play サービスにアクセスできる場合は、ユーザーの現在のアクティビティの認識をご覧ください。

それ以外の場合、locationListenerでは次のようなことができます: 受信した GPS 信号は同じ位置にある場合でも異なる可能性があるため、新しい場所と古い場所を単純に比較することはできません。次のコードのようなものを使用します

            double venueLat =latitude // Last known lat
            double venueLng = longitude // Last known lng

            double latDistance = Math.toRadians(userLat - venueLat);
            double lngDistance = Math.toRadians(userLng - venueLng);
            double a = (Math.sin(latDistance / 2) * Math.sin(latDistance / 2)) +
                            (Math.cos(Math.toRadians(userLat))) *
                            (Math.cos(Math.toRadians(venueLat))) *
                            (Math.sin(lngDistance / 2)) *
                            (Math.sin(lngDistance / 2));

            double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

            double dist = 6371 * c;             
            if (dist<0.01){ (in km, you can use 0.1 for metres etc.)
                /* If it's within 10m, we assume we're not moving */ 
            }
于 2013-09-25T09:29:31.333 に答える
1

onLocationChanged() メソッドでコードを記述できます。そこでは、デバイスの位置が変わるたびに新しい緯度経度が得られます。OnLocationChange() メソッドは、場所が変更された場合にのみ呼び出されます。しかし、特定の距離に関する計算が必要な場合は、古い緯度経度と新しい緯度経度の間の距離を計算する必要があります。緯度経度を使用して距離を見つけることができます。

于 2013-09-25T09:28:08.810 に答える
0

新しい場所を取得すると、30 秒ごとにそれを以前の場所と比較して、場所に違いがあるかどうかを確認し、デバイスが移動しているかどうかを判断できます。

于 2013-09-25T09:27:30.373 に答える