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);
}
}