2016-11-16 82 views
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實例。我怎樣才能在接收器中獲取該實例? P:我不能調用onStop cz中的remove,即使活動已經被銷燬,也可以觸發fence。

回答

0

試試這個代碼

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

     context.unregisterReceiver(mReceiver); 
    } 

}; 

註冊:

this.registerReceiver(this.mReceiver, new IntentFilter(...)); 
+0

如果廣播接收器是本身未登記,則它won'tbe能聽其他圍欄。我只需要特定的圍欄就可以取消註冊。 –

0

可以刪除其執行/完成通過添加具有唯一鍵圍牆的柵欄,讓每一個圍欄有不同的圍欄關鍵。現在刪除它,只需調用removeFence函數,使用要去除的圍欄的唯一鍵。

樣本函數是如下給出:

private void unregisterFence(String unique_key) { 
    Awareness.FenceApi.updateFences(
      mGoogleApiClient, 
      new FenceUpdateRequest.Builder() 
        .removeFence(unique_key) 
        .build()).setResultCallback(new ResultCallbacks<Status>() { 
     @Override 
     public void onSuccess(@NonNull Status status) { 
      Toast.makeText(MainActivity.this, 
        "Fence unregistered successfully.", 
        Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onFailure(@NonNull Status status) { 
      Toast.makeText(MainActivity.this, 
        "Cannot unregister fence.", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }); 
}