Подтвердить что ты не робот

Как вызвать метод stopervice() класса Service из класса вызывающей активности

Я пытаюсь вызвать метод stopService() класса сервиса из моей активности. Но я не знаю, как получить доступ к методу stopervice из моего класса активности. У меня есть код ниже, но его не работает...........

Это класс 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);

    }


}

Любое предложение очень заметно. Спасибо и с уважением Mintu

4b9b3361

Ответ 1

Я фактически использовал почти тот же код, что и вы выше. Моя регистрация сервиса в манифесте следующая

<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>

В классе службы я создал строку константной константы, идентифицирующую имя службы, например:

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

и из этого действия я называю его

startService(new Intent(MyService.MY_SERVICE));

и остановите его с помощью

stopService(new Intent(MyService.MY_SERVICE));

Он отлично работает. Попытайтесь проверить свою конфигурацию, и если вы не найдете ничего странного, попробуйте отлаживать, правильно ли вызван ваш stopService.

Ответ 2

Фактически для остановки службы мы должны использовать метод stopService(), и вы делаете правильный путь:

Начать:

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

Остановить:

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

если вы вызываете stopService(), тогда вызывается метод onDestroy() в службе (НЕ stopService() метод):

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

вы должны реализовать метод onDestroy()!

Вот полный пример, в том числе о том, как запустить/остановить службу.

Ответ 3

@Juri

Если вы добавляете IntentFilters для своей службы, вы говорите, что хотите разоблачить свою службу в других приложениях, то она может неожиданно прекратиться другими приложениями.

Ответ 4

Похоже, что он должен остановить службу при снятии флажка. Есть ли исключения в журнале? stopService возвращает логическое значение, указывающее, удалось ли остановить службу.

Если вы запускаете свою услугу по намерениям, вам может потребоваться расширить IntentService вместо службы. Этот класс остановит службу самостоятельно, если у нее больше не будет работы.

AutoService

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

}