1

私は認識 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 で削除を呼び出すことはできません。アクティビティが破棄された場合でも、フェンスがトリガーされる可能性があります。

4

2 に答える 2

0

このコードを試してください

private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Code ....

        context.unregisterReceiver(mReceiver);
    }

};

登録 :

this.registerReceiver(this.mReceiver, new IntentFilter(...));
于 2016-11-16T07:32:31.193 に答える