1

私はロケーションとジオフェンシングに取り組んでいます。しかし、私はいくつかの問題を見てきました。私は何かが欠けていると思いますが、実際には、Geo Fencing や Fused Location API などの位置情報サービスに関して多くの混乱があります。

私がしていること

アプリのシナリオによると、ユーザーの場所 (Fused Location API を使用して取得しています) を取得する必要があります。また、ユーザーに目的地を尋ね、ポイント A にいて、場所 F を選んだとします。地点 F に到着したことをアプリに通知してもらいたい.

問題と混乱 :

  1. アプリを使用している場合にのみ、目的地に到着したことが (通知を通じて) 通知されます。現在地が Google を現在地に更新していないようです。アプリが閉じているかバックグラウンドにある場合でも、Googleが彼を追跡する最善の方法は何ですか

  2. 私がやっていることは、ユーザーの目的地の周りにジオ フェンスを作成することです。今、Googleがユーザーを追跡する方法が何であるかわかりません。? ジオ フェンスを作成した後、Google がどのように私たちを追跡するのかを明確にしていただけますか?

  3. アプリがバックグラウンドにある場合や、アプリが強制終了された場合でもサービスが実行され続けるように、サービスに何かを実装する必要がありますか?

私は自分が何を望んでいるかという私の質問について静かにはっきりしていると思います。ご意見をお聞かせください。また、ある場所をジオ フェンスする際に Google がどのように私たちを追跡しているのか教えてください。

これに従ってジオフェンスを作成しています。

あなたの意見を教えてください。

4

1 に答える 1

0

GEOFENCE_TRANSITION_ENTERまたはGEOFENCE_TRANSITION_DWELLジオフェンスをターゲット座標 (Place F) に登録する必要があります。

Activity/Fragment onCreate で、Api クライアントを作成する必要があります。

mGoogleApiClient = new GoogleApiClient.Builder(this)
                                      .addConnectionCallbacks(this)
                                      .addOnConnectionFailedListener(this)
                                      .addApi(LocationServices.API)
                                      .build();

また、接続/切断することを忘れないでください:

protected void onStart() {
    mGoogleApiClient.connect();
    super.onStart();
}

protected void onStop() {
    mGoogleApiClient.disconnect();
    super.onStop();
}

次に、onConnected次のことを行う必要があります。

LocationServices.GeofencingApi.addGeofences(mGoogleApiClient,
                                            geofenceRequest,
                                            pendingIntent)

ジオフェンスは一度だけ追加してください。

geofenceRequest が GeofencingRequest.Builder を使用して構築される場所:

geofenceRequest = new GeofencingRequest.Builder().addGeofence(yourGeofence).build()

yourGeofence と pendingIntent の場所:

yourGeofence = new Geofence.Builder()....build(); // Here you have to set the coordinate of Place F and GEOFENCE_TRANSITION_ENTER/GEOFENCE_TRANSITION_DWELL
pendingIntent = PendingIntent.getService(this,
                                         (int)(System.currentTimeMillis()/1000),
                                         new Intent(this, GeofenceTransitionsIntentService.class),
                                         PendingIntent.FLAG_UPDATE_CURRENT);

GeofenceTransitionsIntentService は次のようになります。

public class GeofenceTransitionsIntentService extends IntentService {
    @Override
    protected void onHandleIntent(Intent intent) {
        GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);

        if (!geofencingEvent.hasError()) {
            int geofenceTransition = geofencingEvent.getGeofenceTransition();
            if (geofenceTransition != -1) {
                List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences();
                if (triggeringGeofences != null && triggeringGeofences.size() > 0) {
                    Geofence geofence = triggeringGeofences.get(0);
                    // Do something with the geofence, e.g. show a notification using NotificationCompat.Builder
                }
            }
        }
    }
}

このサービスをマニフェストに登録することを忘れないでください。

<service android:name=".GeofenceTransitionsIntentService"/>

GeofenceTransitionsIntentService.onHandleIntent()アプリを閉じていても呼び出されます。

それが役に立てば幸い。

于 2016-06-22T12:37:26.893 に答える