2016-03-30 11 views
0

私はGeofenceの有効期限をsetExpirationDuration()の方法で設定しました。今、Geofenceが期限切れになった時期を知る方法を教えてください。コールバックなどありますか?Android Geofenceが期限切れになったときに知る方法?

私はこれを見ましたがstackoverflow questionですが、わかりませんでした。

+0

ただ、この質問にいくつかのコンテキストを取得するために、なぜあなたは、ジオフェンスの期限が切れたりしていないかどうかを知るために欠けていますか?ジオフェンスが期限切れになっているかどうかを確認するには、GeofenceRequestクラスのジオフェンスリストがジオフェンスがまだリストにあるかどうかを確認してください。ドキュメントによると、期限切れになると、ジオフェンスが削除されます。 –

答えて

1

現在、期限切れのジオフェンスやジオフェンスのリストを取得するAPIはありません。

私は2つのオプションを参照してください。

  1. は(SharedPreferences、例えば)ジオフェンスを保存することであろうと、あなたは、ジオフェンスの期限が切れているかどうかを知る必要があるたびに、ちょうどすべて保存されたジオフェンスを反復処理を。

  2. ジオフェンスが期限切れになったときにインテントをスケジュールすることです。追加したいので

    public class MyGeofence { 
        private String id; 
        private double latitude; 
        private double longitude; 
        private float radiusMeters; 
        private int transitionType; 
        private long expirationDurationMillis; 
    
        public Geofence buildGeofence() { 
         return new Geofence.Builder() 
           .setCircularRegion(latitude, longitude, radiusMeters) 
           .setRequestId(id) 
           .setExpirationDuration(expirationDurationMillis) 
           .setTransitionTypes(transitionType) 
           .build(); 
        } 
    
        ... 
    } 
    

    :オプション1)

    のため

実装私はあなたが例えばSharedPreferencesに(内部的に保存することができますクラス)を作成することをお勧め最初にこのクラスのオブジェクトを作成するジオフェンスを呼び出し、buildGeofenceを呼び出し、LocationServices.GeofencingApi.addGeofences()を使用して追加してから保存してください。

そして、どのジオフェンスが期限切れになったのかを知りたいときは、保存されているMyGeofenceオブジェクトをすべて反復処理する必要があります。

オプション2の実装が)

あなたのジオフェンスの有効期限を設定した場合、あなたはまた、pendingIntentをスケジュールする必要があります。

Intent notificationIntent = new Intent(this, MyBroadcastReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

long futureInMillis = SystemClock.elapsedRealtime() + delay; 
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); 

がマニフェストに登録することを忘れないでください:

<receiver android:name=".MyBroadcastReceiver" /> 
関連する問題