studio stopservice stop start programacion móviles desarrollo curso aplicaciones and android

stopservice - start service android



Cómo llamar al método stopservice() de la clase de servicio de la clase de actividad de llamada (4)

Estoy tratando de llamar al método stopService () de mi clase de servicio desde mi actividad. Pero no sé cómo acceder al método stopservice desde mi clase de actividad. Tengo el siguiente código pero no funciona ...........

Esta es la clase HomeScreen:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); enablecheck = (CheckBox)findViewById(R.id.enablecheck); enablecheck.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if(enablecheck.isChecked()){ startService(new Intent(HomeScreen.this, AutoService.class)); }else { stopService(new Intent(HomeScreen.this, AutoService.class)); } } }); }

This is Service Class:

public class AutoService extends Service { private static final String TAG = "AutoService"; private Timer timer; private TimerTask task; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Toast.makeText(this, "Auto Service Created", Toast.LENGTH_LONG).show(); Log.d(TAG, "onCreate"); int delay = 5000; // delay for 5 sec. int period = 5000; // repeat every sec. timer = new Timer(); timer.scheduleAtFixedRate(task = new TimerTask(){ public void run() { System.out.println("done"); } }, delay, period); } @Override public boolean stopService(Intent name) { // TODO Auto-generated method stub timer.cancel(); task.cancel(); return super.stopService(name); } }

Cualquier sugerencia altamente apreciable. Gracias y Saludos Mintu


@Juri

Si agrega IntentFilters para su servicio, está diciendo que desea exponer su servicio a otras aplicaciones, entonces otras aplicaciones lo pueden detener inesperadamente.


De hecho, para detener el servicio , debemos usar el método stopService() y lo está haciendo de la manera correcta:

Iniciar servicio:

Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class); startService(myService);

Detener el servicio:

Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class); stopService(myService);

Si llama a stopService() , entonces se onDestroy() al método onDestroy() en el servicio ( NO al método stopService() ):

@Override public void onDestroy() { timer.cancel(); task.cancel(); Log.i(TAG, "onCreate() , service stopped..."); }

Debes implementar el método onDestroy() !.

Aquí hay un ejemplo completo que incluye cómo iniciar / detener el servicio.


De hecho, utilicé prácticamente el mismo código que tú. Mi registro de servicio en el manifiesto es el siguiente

<service android:name=".service.MyService" android:enabled="true"> <intent-filter android:label="@string/menuItemStartService" > <action android:name="it.unibz.bluedroid.bluetooth.service.MY_SERVICE"/> </intent-filter> </service>

En la clase de servicio, creé una cadena constante de acuerdo que identifica el nombre del servicio como:

public class MyService extends ForeGroundService { public static final String MY_SERVICE = "it.unibz.bluedroid.bluetooth.service.MY_SERVICE"; ... }

y de la actividad correspondiente lo llamo con

startService(new Intent(MyService.MY_SERVICE));

y detenerlo con

stopService(new Intent(MyService.MY_SERVICE));

Funciona perfectamente. Intente verificar su configuración y, si no encuentra nada extraño, intente depurar si su servicio de detención se llama correctamente.


Parece que debería detener el servicio cuando desactiva la casilla de verificación. ¿Hay alguna excepción en el registro? stopService devuelve un valor booleano que indica si pudo o no detener el servicio.

Si está iniciando su servicio por Intenciones, es posible que desee extender IntentService lugar de Servicio. Esa clase detendrá el servicio por sí solo cuando no tenga más trabajo que hacer.

Auto servicio

class AutoService extends IntentService { private static final String TAG = "AutoService"; private Timer timer; private TimerTask task; public onCreate() { timer = new Timer(); timer = new TimerTask() { public void run() { System.out.println("done"); } } } protected void onHandleIntent(Intent i) { Log.d(TAG, "onHandleIntent"); int delay = 5000; // delay for 5 sec. int period = 5000; // repeat every sec. timer.scheduleAtFixedRate(timerTask, delay, period); } public boolean stopService(Intent name) { // TODO Auto-generated method stub timer.cancel(); task.cancel(); return super.stopService(name); } }