2

I made an service that triggers every 10 sec. How to connect service to activity when it triggers. Example i refresh my local DB, when appears an update Activity send an Toast.

AlarmService.class

    @SuppressLint("SimpleDateFormat")
public class AlarmService extends Service {

    Handler mHandler;
    private PendingIntent pendingIntent;

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

    @Override
    public void onCreate() {
    }

    public void f() {
        Toast t = Toast.makeText(this, "Service is still running",
                Toast.LENGTH_SHORT);
        t.show();
    }

    @Override
    @Deprecated
    public void onStart(Intent intent, int startId) {
        Toast t = Toast.makeText(this, "Service started", Toast.LENGTH_SHORT);
        t.show();

        // TODO Auto-generated method stub
        super.onStart(intent, startId);

        mHandler = new Handler();
        Runnable r = new Runnable() {
            @Override
            public void run() {
                f();
                mHandler.postDelayed(this,10000);
            }
        };
        mHandler.postDelayed(r, 10000);
    }
}

MainActivity.class

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       Intent serviceIntent = new Intent(this,AlarmService.class);
        startService(serviceIntent);

    }
}
Dimitri
  • 8,122
  • 19
  • 71
  • 128
Unknown
  • 85
  • 6

2 Answers2

0

You can use LocalBroadcastManager, Messenger, ResultReceiver to send data from service to Activity.

Here is an example that uses ResultReceiver to send updated data from Service to Activity.

Community
  • 1
  • 1
Geeky Singh
  • 1,003
  • 9
  • 20
0

Use broadcast receiver like this

public static class MyExtBroadcastReceiver extends BroadcastReceiver {

    public MyExtBroadcastReceiver() { 
         super();
    } 

    @Override
    public void onReceive(Context context, Intent intent) {
     //Call your activity here      
    }

Make a method for setting the alarm

 public void setAlarm(){
    f(); // call your method f() here 
    AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE);
    Intent alarmintent1 = new Intent(this, MyExtBroadcastReceiver.class);
    PendingIntent sender1=PendingIntent.getBroadcast(this, 100, alarmintent1, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
    try {
        am.cancel(sender1);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println("ex....."+e);
    }

    Calendar cal=Calendar.getInstance();
    cal.add(Calendar.Seconds,10);
    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*10*60, sender1);

Call this method from OnCreate()

@Override
public void onCreate() {
  setAlarm();

}
}
Andrain
  • 872
  • 1
  • 16
  • 43