2015-03-25 113 views
0

我有一个检测位置的代码,我只想工作2分钟。仅在特定时间运行脚本

当我启动start()方法的脚本必须工作大约2分钟。

问题在那里,如何运行我的脚本只在特定的时间。 我用这个代码但没有正确运行。

不从定时器挡火()()方法。时间表()

public class a implements LocationListener{ 
    private LocationManager locationManager; 
    private String provider; 
    private Location lastloc; 
    private Context _context; 

    public a(Context context){ 
     _context = context; 
    } 

    public void start(){ 
     locationManager = (LocationManager) _context.getSystemService(Context.LOCATION_SERVICE); 


     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1, (LocationListener) this); 

     new Timer().schedule(
      new TimerTask(){ 
       public void run() { 
        stop(); 
       } 
      } 
     ,System.currentTimeMillis(), 2*60*1000); 
    } 

    public void stop(){ 
     Log.d("states","stop"); 
     locationManager.removeUpdates((LocationListener) this); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     Log.d("states", "onLocationChanged()"); 
     lastloc = location; 
    } 

    @Override 
    public void onProviderDisabled(String arg0) { 
    } 

    @Override 
    public void onProviderEnabled(String arg0) { 
    } 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
    } 
} 
+0

你的代码的行为如何?它会在2分钟后继续更新还是在此之前停止更新? – hasan83 2015-03-25 07:50:23

+0

它在2分钟后不断更新并且不停止。 – saeid 2015-03-25 08:23:28

+0

我相信你的问题是不是在这个代码 – hasan83 2015-03-25 08:48:09

回答

0

再次检查您的Timer代码。通常情况下,Timer代码应该是这样的:

Timer.schedule(TimerTask, 
     delayTime); // delay a task before executed for the first time, in milliseconds 

因为你delayTime已通过System.currentTimeMillis()执行时,System采自午夜以毫秒为单位的当前时间,从而使TimerTask将经过几百毫秒执行。

因此,使用此代码:

Timer timer = new Timer(); 
timer.schedule(new TimerTask(){ 
     @Override 
     public void run() { 
      // do your thing here 
     } 
    }, 2*60*1000); 

看到这个documentation你创建的Timer类型。

0

我终于用处理解决我的问题。

阅读此页:Using Bundle Android to Exchange Data Between Threads

a.java

public class a implements LocationListener{ 
    private LocationManager locationManager; 
    private String provider; 
    private Location lastloc; 
    private Context _context; 

    private Thread workingthread = null; 
    final Handler mHandler = new Handler(){ 
     public void handleMessage(Message msg) { 
      Log.d("states","return msg from timer2min"); 
      if(msg.what==1){ 
       stop(); 
      } 
      super.handleMessage(msg); 
     } 
    }; 

    public a(Context context){ 
     _context = context; 
    } 

    public void start(){ 
     locationManager = (LocationManager) _context.getSystemService(Context.LOCATION_SERVICE); 

     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1, (LocationListener) this); 

     workingthread=new timer2min(mHandler); 
     workingthread.start(); 
    } 

    public void stop(){ 
     Log.d("states","stop"); 
     locationManager.removeUpdates((LocationListener) this); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     Log.d("states", "onLocationChanged()"); 
    } 

    @Override 
    public void onProviderDisabled(String arg0) { 
    } 

    @Override 
    public void onProviderEnabled(String arg0) { 
    } 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
    } 
} 

timer2min.java

public class timer2min extends Thread { 
    private Handler hd; 

    public timer2min(Handler msgHandler){ 
     hd = msgHandler; 
    } 

    public void run() { 
     try { 
      Thread.sleep(2*60*1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     Message msg = hd.obtainMessage(); 
     msg.what = 1; 
     hd.sendMessage(msg); 
    } 
}