package com.rubenvandeven.emotionhero; import android.app.ActivityManager; import android.app.Service; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.IBinder; import android.util.Log; import java.util.List; import java.util.concurrent.TimeUnit; /** * Created by ruben on 05/10/16. */ public class KioskService extends Service { private static final long INTERVAL = TimeUnit.SECONDS.toMillis(2); // periodic interval to check in seconds -> 2 seconds private static final String TAG = KioskService.class.getSimpleName(); private static final String PREF_KIOSK_MODE = "pref_kiosk_mode"; private Thread t = null; private Context ctx = null; private boolean running = false; @Override public void onDestroy() { Log.i(TAG, "Stopping service 'KioskService'"); running =false; super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "Starting service 'KioskService'"); running = true; ctx = this; // start a thread that periodically checks if your app is in the foreground t = new Thread(new Runnable() { @Override public void run() { do { handleKioskMode(); try { Thread.sleep(INTERVAL); } catch (InterruptedException e) { Log.i(TAG, "Thread interrupted: 'KioskService'"); } }while(running); stopSelf(); } }); t.start(); return Service.START_NOT_STICKY; } private void handleKioskMode() { // is Kiosk Mode active? if(true) { // is App in background? if(isInBackground()) { restoreApp(); // restore! } } } private boolean isInBackground() { ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); List taskInfo = am.getRunningTasks(1); ComponentName componentInfo = taskInfo.get(0).topActivity; return (!ctx.getApplicationContext().getPackageName().equals(componentInfo.getPackageName())); } private void restoreApp() { // Restart activity Intent i = new Intent(ctx, IntroActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ctx.startActivity(i); } public boolean isKioskModeActive(final Context context) { return true; // SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); // return sp.getBoolean(PREF_KIOSK_MODE, false); } @Override public IBinder onBind(Intent intent) { return null; } }