【问题标题】:Android LocationListener for a certain timeAndroid LocationListener 一段时间
【发布时间】:2014-06-26 23:27:28
【问题描述】:

我想收集应用用户的位置。为此,我创建了一个Service,如下所示。

public class UpdateLocationService extends Service implements LocationListener {

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

    @Override
    public void onStart(Intent intent, int startid) {

        Log.d("Service", "UpdateLocationService started");




        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(false);
        criteria.setPowerRequirement(Criteria.POWER_LOW);

        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        String providerFine = locationManager.getBestProvider(criteria, true);

        if (providerFine != null) {
            locationManager.requestLocationUpdates(providerFine,
                    Constant.minLocationUpdateTime,
                    Constant.minLocationUpdateDistance, this);

        }
    }

    @Override
    public void onLocationChanged(Location loc) {
        // TODO Auto-generated method stub

        Log.d("LocationListener", "onLocationChanged");

        // update Location through web-service call


    }

    @Override
    public void onProviderDisabled(String arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    .......................

}

我已经在用户登录和启动时启动了该服务。我创建了一个 BroadcastReceiver 以便它在启动时启动。所有功能都运行良好。现在需要将位置数据收集限制在每天上午 9 点到下午 6 点。实现该功能的最佳方法是保持我的最低功耗。每天早上 9 点到下午 6 点可以运行服务吗?

【问题讨论】:

    标签: android service location locationmanager locationlistener


    【解决方案1】:

    有几种方法。

    您可以在服务中进行检查,检查时间并在这些时间内注册位置更新,并在之后取消注册。如您所说,这将提供更好的电池消耗。

    或者根据上下文,您可以使用警报管理器并计算您希望启动服务的时间,您可以在 android 启动/登录时执行此操作。以See here 为例。

    另外,请考虑使用 'location poller' library,因为它可以有效地使用 WakeLocks,因此它可能满足您的需求,内置电池感知功能。

    【讨论】:

    • 我已经完成了这个例子。但是如何在下午 6 点之后停止服务?
    • 使用警报管理器在那个时候触发一些代码。然后从那里注销位置更新
    • 我使用了代码。但它只是在执行时启动服务,尽管它设置为 12-13 小时后。if (hourOfDay >= 9 && hourOfDay
    猜你喜欢
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多