2016-05-24 70 views
-3

我正在進行一項活動,它在其上面填充框架佈局和一個MapFragment。地圖標記應該每隔幾分鐘更新一次,所以我想我可以使用Service來生成http請求。服務和主要活動通信

問題是,該服務(尚未實現)如何能夠傳達或更新我的MapFragment的UI和一些主要活動的UI?

回答

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

} 

我希望它會工作,好運:)