2015-08-27 104 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