2016-05-24 1 views
-3

У меня есть активность, которая заполняет макет кадра и MapFragment сверху. Маркер карты следует обновлять каждые несколько минут, поэтому я подумал, что могу использовать службу для генерации http-запросов.Обслуживание и основные виды деятельности связь

Вопрос в том, как эта служба (которая еще не реализована) может связывать или обновлять пользовательский интерфейс MapFragment и некоторые пользовательские интерфейсы основной деятельности?

ответ

0

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

Look Here

+0

Хотя эта ссылка может ответить на вопрос , , лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответы могут быть недействительными, если связанная страница изменяется – AADProgramming

0

Вы можете получать обновления для вашей деятельности от службы, смотрите этот контрпример, чтобы получить помощь в выполнении этого.

CounterUpdates.java

package yourPackage; 

public class CounterUpdates { 
    private static CounterUpdates mInstance; 
    private ICounterUpdates mListener; 

    private CounterUpdates() {} 

    public static CounterUpdates getInstance() { 
     if(mInstance == null) { 
      mInstance = new CounterUpdates(); 
     } 
     return mInstance; 
    } 

    public void setListener(ICounterUpdates listener) { 
     mListener = listener; 
    } 

    public void onCountUpdate(int count) { 
     if(mListener != null) { 
      mListener.onCountUpdate(count); 
     } 
    } 


    // Definition of location updates interface 
    public interface ICounterUpdates { 
     public void onCountUpdate(int count); 
    } 
} 

CounterService.java

package yourPackage; 

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

public class CounterService extends Service { 

    private Handler mHandler = new Handler(); 
    private int mCount = 0; 
    private static final int INTERVAL = 500; 
    private Runnable mRunnableCounter = new Runnable() { 
     @Override 
     public void run() { 
      deliverResults(++mCount); 
      mHandler.postDelayed(this, INTERVAL); 
     } 
    }; 


    @Override 
    public int onStartCommand(final Intent intent, final int flags, final int startId) { 
     startCounterThread(); 
     return START_STICKY; 
    } 


    private void startCounterThread() { 
     mCount = 0; 
     mHandler.postDelayed(mRunnableCounter, INTERVAL); 
    } 

    private void stopCounterThread() { 
     mHandler.removeCallbacks(mRunnableCounter); 
    } 



    public static void deliverResults(int count) { 
     CounterUpdates.getInstance().onCountUpdate(count); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     stopCounterThread(); 
    } 

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

AndroidManifest.xml (Зарегистрировать свой сервис)

<service android:name="yourPackage.CounterService" /> 

Чтобы запустить службу использовать этот код:

startService(new Intent(this, CounterService.class)); 

YourActivity.java

public class YourActivity extends Activity implements CounterUpdates.ICounterUpdates { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_layout); 

     CounterUpdates.getInstance().setListener(this); 
    } 

    @Override 
    public void onCountUpdate(int count) { 
     ((TextView) findViewById(R.id.textView)).setText("Count: " + count); 
    } 

} 

Я надеюсь, что это будет работать, удачи :)