2010-09-23 100 views
4

我正在開發一個android手機應用程序,它與json/rest web服務進行通信。我需要定期對服務器進行某些類型的調用以檢查某些信息。 在這種情況下,我可能還需要查詢GPS當前位置。我很難決定使用本地服務,因爲我不太清楚如何處理它們,實際上我需要定期檢索這些數據並相應刷新MapView。 我聽說我可以在服務中使用PendingIntents,將這些數據作爲有效載荷並將它們發送給解包數據並刷新UI的廣播接收器,我還聽說這是一種糟糕的設計方法,因爲廣播接收器旨在用於。 有沒有人有一些有用的提示?設計方法:android和web服務

+0

我會用這個服務。 – fredley 2010-09-23 13:13:48

回答

2

首先你必須處理谷歌地圖,因爲你會顯示一個地圖視圖。看看這個 Using Google Maps in Android on mobiForge

其次你需要一個提供gps數據的類。使用消息處理程序獲取位置數據和更新UI非常簡單。這裏有一個例子:

public MyGPS implements LocationListener{ 

    public LocationManager lm = null; 
    private MainActivity SystemService = null; 
    //lat, lng 
    private double mLongitude = 0; 
    private double mLatitude = 0; 

    public MyGPS(MainActivity sservice){ 
     this.SystemService = sservice; 
     this.startLocationService(); 
    } 

    public void startLocationService(){ 
     this.lm = (LocationManager) this.SystemService.getSystemService(Context.LOCATION_SERVICE); 
     this.lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 5, this); 
    } 

    public void onLocationChanged(Location location) { 
     location = this.lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     try { 
      this.mLongitude = location.getLongitude(); 
      this.mLatitude = location.getLatitude(); 
     } catch (NullPointerException e) { 
      Log.i("Null pointer exception " + mLongitude + "," + mLatitude, null); 
     } 
    } 
} 

在你onCreate方法使這個類的一個實例和LocationListener的開始聽的GPS更新。但是你不能訪問lng和lat,因爲你不知道你的活動是否被設置或爲空。因此,你需要將消息發送到您的主活動時,緯度和經度設定的處理程序:

修改下面的方法:

public void onLocationChanged(Location location) { 
     location = this.lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     try { 
      this.mLongitude = location.getLongitude(); 
      this.mLatitude = location.getLatitude(); 
      Message msg = Message.obtain(); 
      msg.what = UPDATE_LOCATION; 
      this.SystemService.myViewUpdateHandler.sendMessage(msg); 
     } catch (NullPointerException e) { 
      Log.i("Null pointer exception " + mLongitude + "," + mLatitude, null); 
     } 
    } 

在您的主要活動補充一點:

Handler myViewUpdateHandler = new Handler(){ 

     public void handleMessage(Message msg) { 
       switch (msg.what) { 
       case UPDATE_LOCATION: 
       //access lat and lng 
     })); 
       } 

       super.handleMessage(msg); 
     } 
}; 

由於處理程序處於您的mapactivity中,因此您可以輕鬆地在處理程序本身中更新您的UI。每次gps數據都是可用的,處理程序觸發並接收消息。

開發REST API是一件非常有趣的事情。一個簡單的方法是在Web服務器上有一個php腳本,根據請求返回一些json數據。如果你想開發這樣的服務,這個教程可能會幫助你,link

+0

謝謝。這有幫助!我所指的數據是其他用戶(不同標準)與WS的位置的json表示。所以我只是想知道在哪裏放置代碼來創建http請求,這可能在這裏,因爲這是一個服務本身或者在一個不同的線程中。通過這種方式,只要我收到位置更新並且同時檢索其他人(使用不同的處理程序進行UI更新),我就可以更新服務器上的位置。否則,這兩個任務將在不同的線程中工作,但我不知道複雜程度。 – urobo 2010-09-23 14:58:16

+0

我找到了一個名爲friend finder的應用程序,這裏是教程,可能對你很有趣,http://www.anddev.org/viewtopic.php?t=93 – 2010-09-23 16:07:45