title: GEOFENCE TRANSITION DWELL not working in android
body: <p>I am working on <code>geofence</code>, I have problem related to <code>GEOFENCE TRANSITION DWELL</code> not <code>Trigger</code> while <code>Enter and Exit Transition</code> working fine. I spent lots of time of time googling but find too much about my problem. I just want to send <code>notification</code> after every one minute to user If user stay within <code>geofence radius</code>.   </p>
  
  <p>Here is my Geofence Helper Class:</p>
  
  <pre><code>public class GeofenceHelper {
  
  private Context mContext;
  private GeofencingRequest geoFencingRequest;
  private Intent intent;
  private PendingIntent pendintIntent;
  
  public GeofenceHelper(Context mContext) {
      this.mContext = mContext;
  }
  
  public void addGeofence(List&lt;ExcelDataModel&gt; excelDataModel, ResultCallback&lt;Status&gt; statusResultCallback) {
      List&lt;Geofence&gt; geofenceList = new ArrayList&lt;&gt;();
      for (ExcelDataModel dataModel : excelDataModel) {
          if (!TextUtils.isEmpty(dataModel.getLatitude()) &amp;&amp; !TextUtils.isEmpty(dataModel.getLongitude()) &amp;&amp; !TextUtils.isEmpty(dataModel.getRadius())) {
              Geofence geofence = new Geofence.Builder()
                      .setRequestId(String.valueOf(dataModel.getId()))
                      .setCircularRegion(Double.parseDouble(dataModel.getLatitude()), Double.parseDouble(dataModel.getLongitude()), Float.parseFloat(dataModel.getRadius()))
                      .setExpirationDuration(Geofence.NEVER_EXPIRE)
                      .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT | Geofence.GEOFENCE_TRANSITION_DWELL)
                      .setLoiteringDelay(60000)
                      .build();
  
              geofenceList.add(geofence);
          }
      }
  
      if (geofenceList.size() &lt; 1){
          Toast.makeText(mContext, "NO valid geofence.", Toast.LENGTH_SHORT).show();
          return;
      }
  
      geoFencingRequest = new GeofencingRequest.Builder()
              .setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER)
              .addGeofences(geofenceList)
              .build();
  
  
      intent = new Intent(mContext, GeofenceService.class);
      intent.putExtra(GeofenceService.EXTRA_ID, 12);
      pendintIntent = PendingIntent.getService(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
      if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
          return;
      }
      LocationServices.GeofencingApi
              .addGeofences(App.getGoogleApiHelper().googleApiClient, geoFencingRequest, pendintIntent)
              .setResultCallback(statusResultCallback);
  
      Toast.makeText(mContext, "Total Geofences: " + geofenceList.size(), Toast.LENGTH_SHORT).show();
  
  }
  }
  </code></pre>
  
  <p>And Here is my Geofence Service Class:</p>
  
  <pre><code>public class GeofenceService extends IntentService {
  
  public static final String TAG = GeofenceService.class.getSimpleName();
  public static String EXTRA_ID = "extra_id";
  
  
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
      return super.onStartCommand(intent, flags, startId);
  }
  
  public GeofenceService() {
      super(TAG);
  }
  
  @Override
  protected void onHandleIntent(Intent intent) {
      GeofencingEvent event = GeofencingEvent.fromIntent(intent);
      if (event.hasError()) {
          Toast.makeText(this, "Goefence Error: " + event.getErrorCode(), Toast.LENGTH_SHORT).show();
      } else {
          int transition = event.getGeofenceTransition();
          Log.d(TAG, "onHandleIntent: " + transition);
          List&lt;Geofence&gt; geofences = event.getTriggeringGeofences();
  
          Geofence geofence = geofences.get(0);
          String requestId = geofence.getRequestId();
  
          ExcelDataModel excelData = App.getDatabaseAdapter().getRecordById(requestId);
          CategoryModel categoryModel = App.getDatabaseAdapter().getCategoryById(excelData.getCategory());
  
          if (transition == Geofence.GEOFENCE_TRANSITION_ENTER) {
  
              if (categoryModel.getStatus() == 1){
  
                  sendNotification(excelData.getName(),excelData.getNotificationMessage());
              }
              App.getDatabaseAdapter().addOrUpdateNOtificaion(new NotificationModel(requestId, excelData.getName(), excelData.getNotificationMessage(), getDateTime()));
  
          }else if (transition == Geofence.GEOFENCE_TRANSITION_EXIT){
  
              if (categoryModel.getStatus() == 1) {
                  sendNotification(excelData.getName(), "Exit Geofence");
              }
  
              App.getDatabaseAdapter().addOrUpdateNOtificaion(new NotificationModel(requestId, excelData.getName(), excelData.getNotificationMessage(), getDateTime()));
          } else if (transition == Geofence.GEOFENCE_TRANSITION_DWELL) {
              Log.d(TAG, "DWELL geofence- " + requestId);
              if(categoryModel.getStatus() == 1) {
                  sendNotification(excelData.getName(), "Hello buddy You are still here!!");
              }
  
              App.getDatabaseAdapter().addOrUpdateNOtificaion(new NotificationModel(requestId, excelData.getName(), excelData.getNotificationMessage(), getDateTime()));
  
          }
      }
  }
  
  public void sendNotification(String title, String mess) {
  
      Intent ii = new Intent(this, MainActivity.class);
      ii.putExtra("check",R.id.notification_id);
      PendingIntent pi = PendingIntent.getActivity(this, 0, ii, PendingIntent.FLAG_UPDATE_CURRENT);
  
      NotificationCompat.Builder ncompat = new NotificationCompat.Builder(this)
              .setSmallIcon(R.drawable.ic_notifications_active_black_24dp)
              .setContentTitle(title)
              .setContentText(mess)
              .setContentIntent(pi)
              .setDefaults(Notification.DEFAULT_VIBRATE)
              .setAutoCancel(true);
      Notification notification = ncompat.build();
      NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
      nm.notify(0, notification);
  }
  </code></pre>