user2708104
user2708104

Reputation: 1

Android Data Upload in fixed time interval

I have an Android application, which uploads data into web service using async tasks(P,Q,R) currently starting fired in button click. I have three tables(A,B,C) of data. Currently I upload Table A data in doInBackground in first async task(P), I call second async task(Q) in onPostExecute of first async task(P).In onPostExecute, I update my local tables with returned data and give some UI messages as well. while that functionality is existing, now I want to upload data in a fixed time interval(every 30 minutes) even though the application is closed. when the device is booting up/installing app/updating app, this process should be started.While uploading data, if the user opens the application, upload button should be disabled.I don't necessarily need a long running task that runs forever. 1.Do I need to use services instead async tasks? and give me advice on this.

Upvotes: 0

Views: 161

Answers (2)

pamitha
pamitha

Reputation: 55

Your Receiver class

 import java.util.Timer;
 import java.util.TimerTask;


 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;

 public class yourReceiver extends BroadcastReceiver {

     @Override
     public void onReceive(final Context context, Intent intent) {
         int delay = 5000; // delay for 5 sec.5000
         int period = 60000; // repeat every 1min.60000

          Timer timer = new Timer();
          timer.scheduleAtFixedRate(new TimerTask() {
          public void run() {
             Intent serviceIntent = new Intent(context,UploadService.class);
             context.startService(serviceIntent);
          }
         }, delay, period);

     }
 }

Your Service Class

import android.app.Service;  
import android.content.Intent;  
import android.media.MediaPlayer;  
import android.os.IBinder;  
import android.widget.Toast;  
public class UploadService extends Service {  
 MediaPlayer myPlayer;  
 @Override  
 public IBinder onBind(Intent intent) {  
  return null;  
 }  
 @Override  
 public void onCreate() {  
  Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();  

  myPlayer = MediaPlayer.create(this, R.raw.sun);  
  myPlayer.setLooping(false); // Set looping  
 }  
 @Override  
 public void onStart(Intent intent, int startid) {  
  Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();  
  serviceThread = new ServiceThread();
  serviceThread.start();  
 }  
 @Override  
 public void onDestroy() {  
  Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();  
  myPlayer.stop();  
 }  

    private class ServiceThread extends Thread {
    @Override
    public void run() {
        synchronized(UploadService.class){
            if(uploadStatus) {
                uploadStatus = false;
                uploadData();
                uploadStatus =true;
            }
        }


    }   
}
}  

Upvotes: 0

Aniruddha K.M
Aniruddha K.M

Reputation: 7511

To Upload Data do as follow

I think you are pretty new to android, Rather than Asynctasks i think you should move to volley or retrofit which is very easy and very fast when compared to Asynctask

Do I need to use services instead async tasks

Since you need to upload data every 30 mins i suggest you move your code to a service within which you will upload data. Also since a service is used it will work when the app is closed also, as it runs in the background

Upvotes: 1

Related Questions