2015-04-27 4 views
1

Я намеревался работать следующим образом: пользователь переключается на функцию: пусть погода. теперь данные о погоде будут поступать с сервера каждые 6 часов и будут показаны виджету (remoteview). Теперь пользователь отключает эту функцию. то виджет не должен показывать погоду или даже обновлять данные каждые 6 часов. есть еще еще 3-4 функции. Теперь я создал службу для получения всех необходимых данных, и я передал их в remoteview. Для запуска службы я использовал это в TimeOut активность:Служба в android 5.0+

i = new Intent(TimeOut.this, TimeService.class); 
i.setAction("com.example.Weather.Idle"); 
startService(i); 

же для остановки службы в ВЫКЛЮЧАЙТЕ код:

stopService(i) 

Этот код работает отлично в API < = 19. Но в Lollipop он падает при запуске или остановке обслуживания. Я много искал в SO, а также попробовал код для привязки или развязывания службы, но ничего не помог. Пожалуйста, помогите мне с какой-то код, а не только ссылки ... Заранее спасибо :)

+0

Вы можете добавить stracktrace, пожалуйста? –

+0

yup ... всего в секунду – kiturk3

+0

на самом деле его не сбой ... но сервис не останавливается при остановке (i). Он работает, хотя я выключен. – kiturk3

ответ

0

Запуск службы от любой деятельности класса

Intent intent = new Intent(MainActivity.this, BackgroundService.class); 
      startService(intent); 

Вот класс обслуживания код

public class BackgroundService extends Service{ 
    public static Context appContext = null; 
    @Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 
    @Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // TODO Auto-generated method stub 

    if (appContext == null) { 
     appContext = getBaseContext(); 
     } 
    Toast.makeText(appContext, "Services Started", Toast.LENGTH_SHORT).show(); 

    return START_STICKY; 
} 

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

+1

Пожалуйста, объясните, как это отвечает на вопрос. – CommonsWare

+0

Спасибо @waheed, но его не останавливают, это моя проблема. Я знаю, как начать и прекратить обслуживание. Но мой код не работает в android 5.0 :) – kiturk3

+0

Я протестировал этот кусок кода на Android 5 +. Он работает отлично. Пожалуйста, попытайтесь выяснить точную проблему. Проверьте свой файл манифеста. Вы зарегистрировали свой сервис? –

0

У меня возникла аналогичная проблема с Service in 5.0. Вероятно, это не правильный ответ, но он работает. Вы могли бы попробовать. Я использую EventBus для связи с моими услугами. Поэтому, когда я хочу, чтобы остановить службу, я бы послал,

EventBus.getDefault().post(new ServiceEvent(ServiceEvent.STOP_SERVICE)); 

В службе,

public void onEvent(ServiceEvent event) { 
    if (event.getEvent() == ServiceEvent.STOP_SERVICE) { 
     methodToStopService(); 
    } 
} 

private void methodToStopService() { 
    // do some stuff 
    stopSelf(); 
} 

Убедитесь, что вы зарегистрировать свой сервис для проведения мероприятий.

private void registerEventBus() { 
    EventBus eventBus = EventBus.getDefault(); 
    if (!eventBus.isRegistered(this)) { 
     eventBus.register(this); 
    } 
} 

Класс ServiceEvent - это мой собственный класс, который я использую с EventBus.

public class ServiceEvent { 
    private int event; 
    public static final int STOP_SERVICE = -1; 

    public ServiceEvent(int event) { 
     this.event = event; 
    } 

    public int getEvent() { 
     return event; 
    } 
} 
+0

перспективных ... Я постараюсь скоро и дам вам знать. Ty :) – kiturk3

+0

Могу ли я знать, что такое ServiceEvent ?? я не мог найти его ... – kiturk3

+0

'ServiceEvent' - класс POJO, который я использую с EventBus. Извиняюсь за путаницу. Казалось бы, это часть SDK. – Froyo

Смежные вопросы