将android服务更改为以特定间隔执行

时间:2016-07-16 23:16:42

标签: android service

我使用获取当前位置的服务的Android示例,它工作正常,但我想知道我必须做出哪些更改,因此它只在特定时间间隔检查当前位置(例如每2分钟一次,而不是仅仅连续不断。

public class YourService extends Service implements LocationListener {
    LocationManager mLocationManager;

public IBinder onBind(Intent intent) {
    // This won't be a bound service, so simply return null
    Log.v("WEAVER_", "Service_OnBind...");
    return null;
}

@Override
public void onCreate() {
    // This will be called when your Service is created for the first time
    // Just do any operations you need in this method.
    Log.v("WEAVER_", "Service_OnCreate...");

    mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1,
            1, this);


}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy(){
    super.onDestroy();
    Log.v("WEAVER_","Service_OnDestroy");
    mLocationManager.removeUpdates(this);
    mLocationManager = null;
}
@Override
public void onLocationChanged(Location location) {
    Log.v("WEAVER_","Service_Location Change");

    String msg = "New Latitude: " + location.getLatitude()
            + "New Longitude: " + location.getLongitude();








      Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}



@Override
public void onProviderDisabled(String provider) {

}

}

2 个答案:

答案 0 :(得分:0)

我不知道您对此的确切意图,但是您可能需要考虑使用IntentService而不是Service。 IntentService将在一个单独的线程中运行,而不是在主线程中运行,也可以启动它,意图服务将执行您打算执行的操作,即获取位置,然后完成它。

然后在持续时间内有几种方法可以做到这一点,但我建议你看看: https://developer.android.com/training/scheduling/alarms.html

如果您选择IntentService,只需在AlarmManager触发时调用(某些上下文).startService。 另外,您可以将服务始终激活(如果您在onStartCommand中返回START_STICKY)并在那里进行警报。

答案 1 :(得分:0)

我能够做的是每隔一段时间检查一次位置。这使用了GoogleAPIClient,因此如果您希望这项工作,则需要将其添加到项目中。此解决方案还需要您使用LocationRequest和FusedLocationProviderApi。

像这样声明GoogleAPIClient:

/home/monica/neo4j-community-3.0.1/data/databases/new_db

然后,将locationRequest添加到fusedLocation,如:

sudo chown -R neo4j:adm /home/monica/neo4j-community-3.0.1/data/databases/new_db

希望这会有所帮助。如果你愿意,我也可以告诉你如何使用timertask

做这样的事情