2012-06-28 116 views
4

我正在使用服務類,它給我的內部類實現位置偵聽器,它提供了我的位置詳細信息...但我需要定期執行此操作..我已經使用線程和循環但只執行一次,請幫位置使用Gps

這是用我的udated答案 更新答案

public class MyService extends Service 
{ 
    String GPS_FILTER = ""; 
    Thread triggerService; 
    LocationListener locationListener; 
    LocationManager lm; 
    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1000; // in Meters 
    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000*60; // in Milliseconds 
    protected LocationManager locationManager; 
    boolean isRunning = true; 
    @Override 
    public void onCreate() 
    { 
      // TODO Auto-generated method stub 
      super.onCreate(); 
      GPS_FILTER = "MyGPSLocation"; 
//   locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
//   locationManager.requestLocationUpdates(
//     LocationManager.GPS_PROVIDER, 
//     MINIMUM_TIME_BETWEEN_UPDATES, 
//     MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
//     new MyLocationListener()); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) 
    { 
      // TODO Auto-generated method stub 
      super.onStart(intent, startId);  
      turnGPSOn(); 
      Toast.makeText(getApplicationContext(), "Hello1",Toast.LENGTH_LONG).show(); 
      LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
      locationListener = new MyLocationListener(); 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES, 1.0f, locationListener); 

    } 

    @Override 
    public void onDestroy() { 
      // TODO Auto-generated method stub 
      super.onDestroy(); 
      // removeGpsListener(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
      // TODO Auto-generated method stub 
      return null; 
    } 

//  private void removeGpsListener(){ 
//   try{ 
//     lm.removeUpdates(locationManager); 
//   } 
//   catch(Exception ex){ 
//     System.out.println("Exception in GPSService --- "+ex); 
//   } 
//  } 


    private class MyLocationListener implements LocationListener 
    { 

     public void onLocationChanged(Location location) 
     { 
      postdata(location.getLatitude(),location.getLongitude()); 
      String message = String.format(
        "New Location \n Longitude: %1$s \n Latitude: %2$s", 
        location.getLongitude(), location.getLatitude() 
      ); 
      Toast.makeText(MyService.this, message, Toast.LENGTH_LONG).show(); 
      turnGPSOnOff(); 
     } 

     public void onStatusChanged(String s, int i, Bundle b) { 
//    Toast.makeText(MyService.this, "Provider status changed", 
//      Toast.LENGTH_LONG).show(); 
     } 

     public void onProviderDisabled(String s) { 
//    Toast.makeText(MyService.this, 
//      "Provider disabled by the user. GPS turned off", 
//      Toast.LENGTH_LONG).show(); 
     } 

     public void onProviderEnabled(String s) { 
//    Toast.makeText(MyService.this, 
//      "Provider enabled by the user. GPS turned on", 
//      Toast.LENGTH_LONG).show(); 
     } 

    } 

也叫服務

Calendar cur_cal = Calendar.getInstance(); 
    cur_cal.setTimeInMillis(System.currentTimeMillis()); 
    Intent intent = new Intent(this, MyService.class); 
    PendingIntent pintent = PendingIntent.getService(login.this, 0, intent, 0); 
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cur_cal.getTimeInMillis(), 60*1000, pintent); 
+0

沒有人能幫助? :( – Sumit

回答

1

試試這個...

TimerTask doAsynchronousTask; 
long timerCall = 5000; 
final Handler handler = new Handler(); 
Timer timer = new Timer(); 

public static int times = 0; 

// For tracking 
doAsynchronousTask = new TimerTask() { 
     @Override 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() { 
        try { 
         performBackgroundTask.execute();//In this function add your code which you want to call repeatedly. OR ADD lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
         Toast.makeText(getApplicationContext(), "Hello1",Toast.LENGTH_LONG).show(); 
         gpsLocationListener = new GpsListener(); 
         long minTime = 30000; // 5 sec... 
         float minDistance = 10; 
         lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, gpsLocationListener); 

         Log.d("BGT", "BGT=" + times++);//how many time it called 
        } catch (Exception e) { 
        } 
       } 
      }); 
     } 
    }; 
    timer.schedule(doAsynchronousTask, 0, timerCall);// execute in every 50000 ms 

`

+0

這不工作我通過我的答案 – Sumit