2015-08-27 145 views
0

我正在嘗試構建一個朋友跟蹤應用程序。現在我正在使用片段,並在每隔30秒的onCreateView中更新跟蹤器,即我將從數據庫中取得我朋友的位置,並相應地在地圖中更新它。我曾嘗試這樣的:如何在android中每30秒更新一次片段視圖?

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    final View v = inflater.inflate(R.layout.tracking_friend, null, false); 

    online = (TextView) v.findViewById(R.id.tvOnline); 
    lastseen = (TextView) v.findViewById(R.id.tvLastSeen); 
    tv_last_seen = (TextView) v.findViewById(R.id.textView2); 
    rel = (RelativeLayout) v.findViewById(R.id.reltrack); 

    mapFrag = (MapFragment) getFragmentManager() 
      .findFragmentById(R.id.tracking_map); 
    map = mapFrag.getMap(); 
    map.setMyLocationEnabled(true); 
    map.getUiSettings().setZoomControlsEnabled(true); 
    map.getUiSettings().setCompassEnabled(true); 
    map.getUiSettings().setMyLocationButtonEnabled(true); 
    map.getUiSettings().setAllGesturesEnabled(true); 
    map.setTrafficEnabled(true); 

    Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_in_right); 
    rel.startAnimation(animation); 


    data = getArguments(); 
    mail = data.getString("mail"); 

    /* while (true) { 
     checkForPosition(mail); 
     return v; 
    }*/ 
    while(true) { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       checkForPosition(mail); 
       Log.i("tracking","i am in thread"); 

      } 



     }).start(); 
     return v; 

    } 

} 

的問題是,它不調用checkForPosition()方法一個時間。但之後,我需要調用checkForPosition()方法以更新map.Is有跟蹤任何方式做它??

回答

0

您可以使用TimerTask的做到這一點:

TimerTask urTask = new TimerTask() {  
     @Override 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() {  
        try { 
         PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask(); 
         // PerformBackgroundTask this class is the class that you put your logic into 
         performBackgroundTask.execute(); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
        } 
       } 
      }); 
     } 
    }; 
    timer.schedule(doAsynchronousTask, 0, 30000); //execute in every 30 secs 
+1

溝'TimerTask',只是使用'Handler'的'postDelayed(...)'方法。 –

0

我一個朋友跟蹤器的工作!

如果您使用的是谷歌地圖,只需將其清除並使用數據庫中新的經緯度座標,每隔30秒再繪製一次標記即可輕鬆完成。

mMap.clear();  
customarker = mMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)).title(title).snippet(snippet).icon(iconBitmap)); 
1

Android將終止使用while(true)或遞歸線程/任務的任何進程,這就是爲什麼您的代碼只執行一次。它甚至可能殺死永遠不會停止的定時器... idk。我會使用在前臺開始的Intent Service。這是您的通知中的小圖標,就像您啓動潘多拉盒型拼圖時一樣。這是Android執行長時間運行流程的最佳方式。

http://developer.android.com/guide/components/services.html