0

Я разрабатываю приложение для переводчика, и по некоторым причинам я хочу инициировать некоторую услугу в классе приложений. я создать класс «MyApplication», который расширяет применение:сервис не останавливается на фрагменте, который начинается с класса приложения

public class MyApplication extends Application{ 
@Override 
public void onCreate() { 
    if(PreferenceUtils.getPreferenceValue(getApplicationContext(),"clipBoardService").equals("")) 
     PreferenceUtils.setPreferenceValue(getApplicationContext(),"clipBoardService","True"); 

    //Start ClipBoard Services 
    if(PreferenceUtils.getPreferenceValue(getApplicationContext(),"clipBoardService").equals("True")) 
     getApplicationContext().startService(new Intent(getApplicationContext(), ClipboardService.class)); 
} 

вы видите, что я начинаю ClipboardService с этой строки кода:

getApplicationContext().startService(new Intent(getApplicationContext(), ClipboardService.class)); 

и по некоторым другим причинам я хочу, чтобы остановить эту услугу один из моих фрагмента, назвал его «SettingFragment»:

public class SettingFragment extends Fragment { 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View inflate = inflater.inflate(R.layout.fragment_setting, container, false); 
     SwitchCompat scClipBoard = (SwitchCompat) inflate.findViewById(R.id.sb_ClipBoard_Service); 
     SwitchCompat scPopUp = (SwitchCompat) inflate.findViewById(R.id.sb_PopUp_Service); 

     // Turn On CheckBox's 
     if(PreferenceUtils.getPreferenceValue(getContext(),"clipBoardService").equals("True")) 
      scClipBoard.setChecked(true); 
     if(PreferenceUtils.getPreferenceValue(getContext(),"popUpService").equals("True")) 
      scPopUp.setChecked(true); 

     // handle OnCheckListener of CheckBox's 
     scClipBoard.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked == true){ 
        PreferenceUtils.setPreferenceValue(getContext(), "clipBoardService", "True"); 
        getActivity().getApplicationContext().startService(new Intent(getActivity().getApplicationContext(), ClipboardService.class)); 
       } 
       else{ 
        PreferenceUtils.setPreferenceValue(getContext(), "clipBoardService", "False"); 
        getActivity().getApplicationContext().stopService(new Intent(getActivity().getApplicationContext(), ClipboardService.class)); 
       } 
      } 
     }); 

вы видите, что я остановить работу с этой строки кода:

getActivity().getApplicationContext().stopService(new Intent(getActivity().getApplicationContext(), ClipboardService.class)); 

но когда я запускаю свою программу, сервис не останавливается. Я смущаюсь, что происходит, и почему мой сервис не является STOP.am. Я ошибаюсь в некоторых пунктах? наилучшие пожелания ...

ответ

0

изменить ваш класс приложения, такие как:

public class MyApplication extends Application { 
public void onCreate() { 
    super.onCreate(); 
    Log.i("Logger", "Service Starting"); 
    startService(new Intent(this, ClipboardService.class)); 
    } 
} 

вам не нужно вызывать getApplicationContext() ... класс Application имеет метод StartService()

остановить ваш сервис в фрагменте, как это:

getActivity().stopService(new Intent(...)); 

объявить также службу в очевидном

<service android:enabled="true" android:name=".ClipboardService" /> 

в вашем фрагменте проверить конкретные погодные условия, если блок еще называют или нет:

else{ 
    PreferenceUtils.setPreferenceValue(getContext(), "clipBoardService", "False"); 
    getActivity().getApplicationContext().stopService(new Intent(getActivity().getApplicationContext(), ClipboardService.class)); 
    } 

вам нужно, чтобы начать службу в фрагменте, как это:

getActivity().startService(new Intent(getActivity(),ClipboardService.class)); 

и остановка службы :

getActivity().stopService(new Intent(getActivity(),ClipboardService.class)); 
+0

благодарит за ответ.Но никаких изменений не произошло! У меня есть один вопрос. В этой строке кода: 'getActivity(). stopService (новый Intent (...)); ' Я вызываю метод stopServic следующим образом: ' getActivity(). StopService (новый Intent (getActivity(). GetBaseContext(), ClipboardService.class)); ' это правда? –

+0

если он работает ... PLS принять ответ – rafsanahmad007

+0

ничего change.i отладить программу и найти Удивительную вещь. Когда я перехожу к myFragment, запуск службы автоматически :( Я отслеживаю приложение с момента запуска приложения до начала процесса fragement lifeCycle (onCreate Method). Служба не работает. Когда я перехожу к фрагменту, запуск службы выполняется автоматически. Я испорчен ... очень очень смущен! –