私は認識 API を使用しており、次のようなフェンスを作成しました。
AwarenessFence activityFence = DetectedActivityFence.during(DetectedActivityFence.STILL);
AwarenessFence headphoneFence = HeadphoneFence.during(HeadphoneState.PLUGGED_IN);
AwarenessFence stillWithHeadPhoneFence = AwarenessFence.and(activityFence, headphoneFence);
Intent intent = new Intent(Constants.ACTION_FENCE);
PendingIntent fencePendingIntent = PendingIntent.getBroadcast(((Activity) context), 0, intent, 0);
MyFenceReceiver mFenceBroadcastReceiver = new MyFenceReceiver();
((Activity) context).registerReceiver(mFenceBroadcastReceiver, new IntentFilter(Constants.ACTION_FENCE));
FenceUpdateRequest.Builder builder = new FenceUpdateRequest.Builder();
builder.addFence(Constants.IDLE_WITH_HEADPHONES_ON, stillWithHeadPhoneFence, fencePendingIntent);
Awareness.FenceApi.updateFences(googleApiClient, builder.build());
そして、これは私の放送受信機です:
public void onReceive(Context context, Intent intent) {
if(TextUtils.equals(Constants.ACTION_FENCE, intent.getAction())) {
FenceState fenceState = FenceState.extract(intent);
if( TextUtils.equals(Constants.IDLE_WITH_HEADPHONES_ON, fenceState.getFenceKey() ) ) {
if( fenceState.getCurrentState() == FenceState.TRUE ) {
//
}
}
}
問題は、レシーバーが初めて実行されたら、フェンスを登録解除または削除する必要があることです。フェンスを削除する方法を探していますが、GoogleApiClient のインスタンスが必要です。レシーバーでそのインスタンスを取得するにはどうすればよいですか?
Ps: onStop cz で削除を呼び出すことはできません。アクティビティが破棄された場合でも、フェンスがトリガーされる可能性があります。