1

私は位置とジオフェンシングに取り組んでいます。しかし、私はいくつかの問題を見てきました。私は何かが足りないと思っていますが、実際には地理的フェンシングと場所情報サービス(Fused Location APIなど)に関する多くの混乱があります。私は私のアプリのシナリオによるとGeoFencingベストStratigies

をやって何

、私は(私が融合場所のAPIを使用して取得しています)、ユーザの位置を取得する必要がありますし、また、私は彼の先が何であるかをユーザーに尋ねると、聞かせてい私は(私を介して通知しています

  1. :F.

    が問題と混乱

    今、私は私のアプリは、彼がポイントに到着したことを彼に通知する必要があることを望む彼はA点にあると言うと、彼は場所F.を選びます通知私の目的地に到着したばかりで、私がアプリに入っている場合に限ります)。私の現在地にGoogleを更新していないようです。アプリが近くにあるか、バックグラウンドでGoogleがまだ彼を追跡する最良の方法は何ですか

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

  3. 私のアプリがバックグラウンドになっていたり、アプリが強制終了されていてもサービスを実行し続ける必要がありますか?

私は自分の望むことについて私の質問については静かであると思います。あなたの意見を共有して、私たちが地理的にどんな地点に拘束されたときにもGoogleがどのように私たちを追跡するのか教えてください。

私は、ジオフェンスを作成するためにthisに従っています。

あなたの意見をお聞かせください。

+0

公式文書 –

答えて

0

ジオフェンスGEOFENCE_TRANSITION_ENTERまたはGEOFENCE_TRANSITION_DWELLジオフェンスをターゲット座標(場所F)に登録する必要があります。あなたの活動/フラグメントのonCreateで

あなたはAPIクライアントを作成する必要があります。次にonConnectedにあなたが次のことを行う必要があります

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

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

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

も接続/切断することを忘れない

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

ジオフェンスを一度追加する必要があります。

ここで、geofenceRequestはGeofencingRequestを使用して作成されます。ビルダー:

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"/> 

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

yourGeofenceとpendingIntent:GeofenceTransitionsIntentServiceは次のように可能性があり

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.onHandleIntent()が呼び出されます。

希望します。

+0

詳細情報をありがとうございます! _mGoogleApiClient.disconnect(); _がGPSトラッキングと呼ばれるときに停止します(通知内に表示されます)。Google Playサービスでユーザーの場所を更新する頻度を決して知らないので、GCMnwmanager/Jobschedular APIを使用してGeofenceトリガを起動するための位置更新を取得するために30秒ごとまたは1分ごとに位置トリガ、あなたからの任意のsuggetions? –

+1

私は頻度を知っているか修正するための方法を見たことがありませんでした。これはOSによって処理されています。これであなたのユースケースでは十分ではない場合は、ジオフェンシングAPIを使用しないで、ユーザーの場所を要求するバックグラウンドサービスを手動で使用するようにしてください。 – fernandospr

関連する問題