Android Open Source - SurveySDK_android Background Uploader






From Project

Back to project page SurveySDK_android.

License

The source code is released under:

Apache License

If you think the Android project SurveySDK_android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.survey.android.services;
//from w w w  .j  av a2s  .  c  o  m
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;

import com.amazonaws.AmazonClientException;
import com.survey.android.R;
import com.survey.android.containers.PollContainer;
import com.survey.android.model.Prefs;
import com.survey.android.util.Log;

/**
 * Uploads a file to S3 in a background thread, showing a persistent notification as it goes and
 * retrying with progressive backoffs several times in case of failure.
 *
 * Pass EXTRA_LOCAL_URI and EXTRA_S3_PATH when starting this service with Strings for the file to
 * upload and where to put it in the S3 bucket.
 */
public class BackgroundUploader extends Service {
  private static final int NOTIFICATION_ID = 803257228;
  public static final String EXTRA_LOCAL_URI = Prefs.PACKAGE + ".localUri";
  public static final String EXTRA_S3_PATH = Prefs.PACKAGE + ".s3Path";
  private NotificationCompat.Builder mNotificationBuilder;
  protected static final int MAX_RETRIES = 3;
  protected static final long RETRY_DELAY_MULTIPLIER_MILLIS = 10000;

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }


  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d("Starting background service...");
    mNotificationBuilder = new NotificationCompat.Builder(this);
    mNotificationBuilder.setSmallIcon(android.R.drawable.stat_notify_sync_noanim);
    mNotificationBuilder.setContentTitle(getString(R.string.app_name));
    mNotificationBuilder.setContentText(getString(R.string.uplaoding_data));
    mNotificationBuilder.setTicker(getString(R.string.uplaoding_data));
    mNotificationBuilder.setOngoing(true);
    mNotificationBuilder.setWhen(System.currentTimeMillis());
    startForeground(NOTIFICATION_ID, mNotificationBuilder.build());

    String localUriExtra = null;
    String s3PathExtra = null;

    if (intent != null && intent.getExtras() != null) {
      localUriExtra = intent.getStringExtra(EXTRA_LOCAL_URI);
      s3PathExtra = intent.getStringExtra(EXTRA_S3_PATH);
    }

    final String localUri = localUriExtra;
    final String s3Path = s3PathExtra;

    new Thread(new Runnable() {
      @Override
      public void run() {
        boolean success = false;
        int retries = 0;

        if (localUri != null && s3Path != null) {
          while (!success && retries < MAX_RETRIES) {
            try {
              Log.d("Uploading retry "+retries);
              Thread.sleep(RETRY_DELAY_MULTIPLIER_MILLIS * retries);
              PollContainer.putFileToS3(localUri, s3Path,BackgroundUploader.this);
              success = true;
            } catch (AmazonClientException e) {
              Log.e("Error in BackgroundUploader:", e);
              retries++;
            } catch (InterruptedException e) {
              Log.e("Error sleeping before retry", e);
              retries++;
            }
          }

          if (retries == MAX_RETRIES) {
            Log.e("Failed to uplaod file after all retries.");
          }
        } else {
          Log.d("No extras found on intent; nothing to upload.");
        }

        Log.d("Stopping service and removing notification");
        stopForeground(true);
        stopSelf();
      }
    }).start();

    return START_STICKY;
  }
}




Java Source Code List

android.UnusedStub.java
com.google.android.gms.BuildConfig.java
com.google.android.gms.BuildConfig.java
com.survey.android.UnusedStub.java
com.survey.android.c2dm.C2DMRegistrationReceiver.java
com.survey.android.c2dm.C2DMTokenRefresher.java
com.survey.android.c2dm.GcmBroadcastReceiver.java
com.survey.android.c2dm.GcmNotificationReceiver.java
com.survey.android.c2dm.GcmRegistrationService.java
com.survey.android.c2dm.RegService.java
com.survey.android.common.PlacesAutoCompleteAdapter.java
com.survey.android.common.Themes.java
com.survey.android.containers.AppContainer.java
com.survey.android.containers.PollContainer.java
com.survey.android.custom_widgets.FontTextView.java
com.survey.android.custom_widgets.PollRatingsScaleLabeled.java
com.survey.android.custom_widgets.PollRatings.java
com.survey.android.custom_widgets.PollSelectionTable.java
com.survey.android.db.SerializationHelper.java
com.survey.android.db.SerializationManager.java
com.survey.android.fragment.AudioRecorderFragment.java
com.survey.android.geofence.GeofenceRemover.java
com.survey.android.geofence.GeofenceRequester.java
com.survey.android.geofence.GeofenceUtils.java
com.survey.android.geofence.LocationServiceErrorMessages.java
com.survey.android.geofence.ReceiveTransitionsIntentService.java
com.survey.android.geofence.SimpleGeofenceStore.java
com.survey.android.geofence.SimpleGeofence.java
com.survey.android.model.AnswerModel.java
com.survey.android.model.CategoryModel.java
com.survey.android.model.CurrentSectionModel.java
com.survey.android.model.Prefs.java
com.survey.android.model.QuestionModel.java
com.survey.android.model.ResponseModel.java
com.survey.android.model.SurveyModel.java
com.survey.android.model.UserModel.java
com.survey.android.services.BackgroundUploader.java
com.survey.android.services.DataBroadcastReceiver.java
com.survey.android.services.DeviceStartUpReceiver.java
com.survey.android.services.GeoSurveyPollService.java
com.survey.android.services.LocationTesterService.java
com.survey.android.services.ReferrerCatcher.java
com.survey.android.session.Configuration.java
com.survey.android.session.Session.java
com.survey.android.util.Base64.java
com.survey.android.util.ConstantData.java
com.survey.android.util.GeoPush.java
com.survey.android.util.GeoTriggerBroadcastReceiver.java
com.survey.android.util.GeoTrigger.java
com.survey.android.util.LocationLog.java
com.survey.android.util.Log.java
com.survey.android.util.StrToIntMap.java
com.survey.android.util.StrToStrMap.java
com.survey.android.util.Toiler.java
com.survey.android.util.WhiteLabel.java
com.survey.android.view.Dashboard.java
com.survey.android.view.Gallery.java
com.survey.android.view.LocalizedFragmentActivity.java
com.survey.android.view.Main.java
com.survey.android.view.Notification.java
com.survey.android.view.Question.java
com.survey.android.view.Survey.java
com.survey.android.view.ThemeCustomizer.java
com.survey.android.view.themed.DashboardThemed.java
com.survey.android.view.themed.MainThemed.java
com.survey.android.view.themed.NotificationThemed.java
com.survey.android.view.themed.QuestionThemed.java
com.survey.android.view.themed.SurveyThemed.java
com.survey.android.webclient.HttpRequest.java
com.survey.android.webclient.HttpsClient.java
com.survey.android.webclient.RestClient.java
com.survey.android.webclient.SurveyHttpClient.java
com.survey.android.webclient.SurveyRequest.java
com.survey.android.webclient.SurveySSLSocketFactory.java
com.survey.android.webclient.SurveyX509TrustManager.java
com.survey.android.widget.Widget.java
com.survey.androiddemo.AppContainer.java
com.survey.androiddemo.LoginActivity.java
com.survey.androiddemo.MainActivity.java
com.survey.androiddemo.SDKConfigSettings.java