2
Geofenceが期限切れになったときに再登録するバックグラウンドジョブを実行しています。Geofences登録時のsetResultCallbackがAsyncTask内で起動されない
コードが正常にトリガされます。通知はonPostExecute
で開始されますが、setResultCallback
のコードは決してアクセスされません。
オブジェクトをジオフェンシングクラスに送信できるため、そのコールバックを有効にする必要があるため、追加および登録されますか?
@Override
public boolean onStartJob(final JobParameters job)
{
mBackgroundTask = new AsyncTask<Object, Void, List<String>>()
{
@Override
protected List<String> doInBackground(Object... params)
{
Context context = GeofenceRegistrationFirebaseJobService.this;
// get all places in the database
Uri uri = PlaceContract.PlaceEntry.CONTENT_URI;
Cursor cursor = context.getContentResolver().query(
uri,
null,
null,
null,
null);
if (cursor == null || cursor.getCount() == 0) return null;
List<String> placesIds = new ArrayList<>();
cursor.moveToPosition(-1);
while (cursor.moveToNext())
{
placesIds.add(cursor.getString(cursor
.getColumnIndex(PlaceContract.PlaceEntry.COLUMN_PLACE_ID)));
}
cursor.close();
return placesIds;
}
@Override
protected void onPostExecute(List<String> placesIds)
{
Context context = GeofenceRegistrationFirebaseJobService.this;
// Build up the LocationServices API client
googleApiClient= new GoogleApiClient.Builder(context)
.addApi(LocationServices.API)
.addApi(Places.GEO_DATA_API)
.build();
geofencing = new Geofencing(context, googleApiClient);
PendingResult<PlaceBuffer> placeResult =
Places.GeoDataApi.getPlaceById(googleApiClient,
placesIds.toArray(new String[placesIds.size()]));
placeResult.setResultCallback(new ResultCallback<PlaceBuffer>()
{
@Override
public void onResult(@NonNull PlaceBuffer places)
{
geofencing.addUpdateGeofences(places);
geofencing.registerAllGeofences();
}
});
// when the job is finished, issue a notification if is set in preferences
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
// does user have notifications enabled?
boolean wantNotif =
pref.getBoolean(context
.getString(R.string.pref_activate_notification_key), true);
if(wantNotif)
{
BackgroundTasks.executeTask(context,
BackgroundTasks.ACTION_NOTIFY_USER_GEOFENCES_REGISTERED);
}
jobFinished(job, false);
}
};
mBackgroundTask.execute();
return true;
}