4

挨拶

Google Play サービスを利用できる ICE Cream サンドウィッチ フォンを持っています。

次のhttp://developer.android.com/training/location/geofencing.htmlから Geofencedetection サンプル アプリをインストールしました。

Mock Location アプリケーションもインストールしました

このモックの場所を使用して、場所をニューデリー (緯度 28.66、長さ 77.21) に設定しました。

サンプル アプリを使用して、次のジオフェンスを登録しました。

Geofence1 lat 11.94898
long 79.48475
radius 1000 メートル

Geofence2 lat 77.00000 long 77.00000 radius 1000 メートル

ここで、再びモックの場所を開き、その場所を (ジオフェンス 1 内で) 自宅として設定します。緯度 11.94898 経度
79.48475

マップ アプリケーションでモックの場所を確認しました。正しく表示されます。開発者向けオプションでモックの場所を許可するを有効にしました

しかし、サンプル ジオフェンス アプリケーションは通知をトリガーしていません。コードを確認しました。コードに従って、ユーザーがジオフェンスに入ったときに通知を送信する必要があります。

通知を送信しない理由がわかりませんでした。これは実際のネットワークでのみ機能しますか?

私が何か間違ったことをしている場合はお知らせください。

宜しくお願いします

4

5 に答える 5

2

のサンプル MockLocation アプリを使用して、同様の経験がありました。

http://developer.android.com/training/location/location-testing.html

たとえば、ジオフェンスが 5,100 に設定されていて、mocklocation アプリを使用して 5,100 に単一のモック位置を挿入すると、ジオフェンスはトリガーされません。

ただし、5,100 で複数のモックの場所を繰り返し挿入すると、ジオフェンスがトリガーされます。私の場合、5,100 で 3 回連続してモックの場所を注入すると、ジオフェンスがトリガーされました。明確にするために、注入と言うときは、次のことを意味します。

mLocationClient.setMockLocation(yourMockLocation);

以下のすべては私の側の純粋な憶測なので、一粒の塩でそれを取ってください: 私の推測では、LocationClient バックエンドに何らかのフィルタリング アルゴリズムがあり、その目的は偽のセンサー値を除外することであり、緯度/経度の大きな変化を検出している可能性があります。可能性のあるスプリアス値として。もう 1 つの可能性は、ジオフェンスが、ユーザーがその近くにいることを示す複数の読み取り値を受信するまでトリガーしないことです。

于 2013-10-26T08:54:44.337 に答える
1

私はしばらくこの問題に悩まされてきました。その後、最終的に、Google モック ロケーション チュートリアル ( http://developer.android.com/training/location/location-testing.html ) で、作成したモック ロケーションを使用して以下の 2 つの呼び出しを設定する必要があることに言及できなかったことが判明しました。

    /*
        setElapsedRealtimeNanos() was added in API 17
     */
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
    }
    newLocation.setTime(System.currentTimeMillis());

これら 2 つの呼び出しがないと、モックの場所はジオフェンスをトリガーしません。これらを呼び出した後、私のジオフェンスは問題なくトリガーされます。

于 2014-11-25T22:40:37.240 に答える
1

バックグラウンドでジオフェンスの更新も取得していないため、アプリがフォアグラウンドのときにアプリの通知を確認してください。しかし、フォアグラウンドでは、正常に動作しています。

于 2013-07-14T12:23:47.253 に答える
0

これに多くの時間を費やした後、最終的に秘密は、モックロケーションインスタンスを作成するときにプロバイダー名「ネットワーク」を使用することであることがわかりました。

Location location = new Location("network");
于 2014-09-29T21:29:26.760 に答える