Creación de servicios en una aplicación Android

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Son códigos que se ejecutan en segundo plano, aunque la aplicación no esté abierta.

Usar CounterTimer como Servicio

Main.javastartService(new Intent(this, CountDownTimerService.class));
CountDownTimerService.javapublic class CountDownTimerService extends Service {
	public static CountDownTimer timer;
	@Nullable
	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
    
	@Override
	public void onCreate() {
		super.onCreate();
		timer = new CountDownTimer(30000, 2000) {//90000
			private int counter;
			public void onTick(long millisUntilFinished) {
				Log.d("traza", "CounterTimer as service");
			}
			public void onFinish() {}
		}.start();
	}
}
AndroidManifest.xml<service android:name="com.pablomonteserin.notifications_and_services.mycountertimerdown_as_service.CountDownTimerService"/>

Ejercicio: yoga con notificaciones

Hacer una aplicación que cada 10 segundos nos vaya indicando un cambio de postura de yoga. Estos avisos serán hechos utilizando notificaciones en las que se oirá el sonido de la postura de yoga y se verá su fotografía. Además, al ir al activity de la aplicación, veremos la misma imagen que se mostraba en la notificación. Las notificaciones se ejecutarán aunque el móvil esté con la pantalla apagada o no estemos el el Activity de la aplicación.

Para ejecutar las notificaciones utilizaremos un servicio:

CountDownTimerServicepublic class CountDownTimerService extends Service {
	NotificationManager mNotificationManager;
	public static CountDownTimer timer;

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

	@Override
	public void onCreate() {
	super.onCreate();
		mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		final Service service = this;
		timer = new CountDownTimer(30000, 10000) {
			private int counter;
			public void onTick(long millisUntilFinished) {
			...

Cuando pulsemos un botón con el texto «terminar servicio» en el MainActivity, dejarán de mostrarse notifiaciones. Además, para poder modificar la imagen del Activity principal, haremos declararemos la variable vinculada a su ImageView pública y estática:

MainActivity.javapublic class MainActivity extends AppCompatActivity {
	public static ImageView iv;
	public static Activity contexto;
	...
	public void cerrarServicio(View v){
		CountDownTimerService.timer.cancel();
		stopService(new Intent(this, CountDownTimerService.class));
	}

Habrá que registrar el servicio en el AndroidManifest.xml

<service android:name="com.pablomonteserin.notifications.ejercicio_yoga.CountDownTimerService"/>

Descargar recursos

Solicitar el servicio de wifi y comprobar su estado


public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        TextView tv =  findViewById(R.id.textView1);
        boolean wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
        if(wifi)tv.setText("El wifi está activo");
        else tv.setText("El wifi no está activo");
    }
}

Habrá que añadir un permiso al AndroidManifest.xml que debe estar a la misma altura que el nodo manifest::

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.