Android LocationListener 一段时间

Posted

技术标签:

【中文标题】Android LocationListener 一段时间【英文标题】:Android LocationListener for a certain time 【发布时间】: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 点可以运行服务吗?

【问题讨论】:

【参考方案1】:

有几种方法。

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

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

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

【讨论】:

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

以上是关于Android LocationListener 一段时间的主要内容,如果未能解决你的问题,请参考以下文章

无法在 android 中强制转换为 android.location.LocationListener

带有 locationListener 回调的 Android 服务

MapsActivity 无法转换为 com.google.android.gms.location.LocationListener

是否需要为具有活动 LocationListener 的 Android 服务获取唤醒锁?

Android LocationListener 一段时间

Android Location LocationListener 总是调用 onProviderDisabled