Как получить, когда служба работает, и обновить интерфейс после ее завершения - PullRequest
0 голосов
/ 29 ноября 2011

Я пытаюсь создать свой сервис, который загружает данные через Интернет, и после того, как сервис заканчивает, отправляет intent in onDestroy() и получает его на вкладке с broadcastreceiver, но на самом деле он никогда не показывает результатв onReceive().Вот что я делаю:

package com.stampii.stampii.collections;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;



public class MyService extends Service{

    ThreadSave myThread;
    public static boolean state;

    public class LocalBinder extends Binder {
        MyService getService() {
            return MyService.this;
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate(){
        myThread = new ThreadSave(this, null);
        myThread.start();
        state = true;
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        state = false;

        Intent intent = new Intent("finish");
        this.sendBroadcast(intent);
    }

    @Override
    public void onStart(Intent intent, int startid) {
        super.onStart(intent, startid);
    }

}

Это мой BroadcastReceiver:

  receiver = new BroadcastReceiver() {
         public void onReceive(Context context, Intent intent) {
          if(intent.getAction().equals("finish")) {
              Log.e("","UGJKHFKLJGHKGKHGKHGKJGLGKLJHKJHVkajhgflasygdfkashfvlazsfklasfylaisyfhg;aisfglafgalskfgl");
               }          
         }
          };

          registerReceiver(receiver, new IntentFilter("finish"));

и как я запускаю / останавливаю службу:

public void getCollectionsInfo(Context context){
 progressBar.setVisibility(View.VISIBLE);
 sync.setImageResource(0);

 SharedPreferences isLogged = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
 SharedPreferences.Editor editor = isLogged.edit();
 editor.putBoolean("getProgBarCollection", true);
 editor.commit();

 /*mythreadSync = new ThreadSave(context, mUpdateUpdateCollections, progressBar);
 mythreadSync.start();*/ 

 this.stopService(new Intent(this, MyService.class));
 this.startService(new Intent(this, MyService.class));

 }

Итаку меня вопрос, правильно ли я делаю и как получить конец потока, который работает в сервисе, и обновлять пользовательский интерфейс после этого на BroadcastReceiver.

1 Ответ

0 голосов
/ 29 ноября 2011

Вы регистрируете свой широковещательный приемник, используя IntentFilter с «my.db.updated» в качестве действия для фильтрации, но вы отправляете свое намерение с «finish» в качестве действия.Либо измените намерение на «my.db.updated», либо измените фильтр намерений на «конец»

...