我的locationListener有问题。
这是我的“MyLocationListenerNetWork”:
public class MyLocationListenerNetwork implements LocationListener {
public MyLocationListenerNetwork(){
super();
}
@Override
public void onLocationChanged(Location loc) {
if(loc!=null){
}
}
@Override
public void onProviderDisabled(String pDisabled) {
}
@Override
public void onProviderEnabled(String pEnabled) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
关键是,我有一个服务,我想“请求”监听器获取网络点。我在onCreate()
中喜欢这个LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListenerNetwork = new MyLocationListenerNetwork();
if(locationListenerNetwork!=null)
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
0, 0, locationListenerNetwork);
它没有问题得分。问题是它消耗了大量的电池,如果我一直让它,它会消耗30-40%的电池。我想只打开一段时间。 这就是为什么在服务内部我有一个Thread,并且在这个线程中,我只打开了一段时间(5分钟)的监听器,但是当我这样做时,监听器没有检索到任何一点......
任何人都知道为什么?
答案 0 :(得分:0)
我认为在 reQuestLocationUpdates 方法中检查参数 minTime
你需要什么,所以刚才提到了minTime参数中的位置请求时间所以你不需要一个线程来实现这个 ..
public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
自:API Level 1
注册指定提供商定期通知的当前活动。定期使用当前位置或状态更新来调用提供的LocationListener。
收到最近的位置可能需要一段时间。如果需要立即位置,应用程序可以使用getLastKnownLocation(String)方法。
如果用户禁用了提供程序,则更新将停止,并且将调用onProviderDisabled(String)方法。只要再次启用提供程序,就会调用onProviderEnabled(String)方法并再次启动位置更新。
可以使用minTime和minDistance参数控制通知频率。如果minTime大于0,则LocationManager可能会在位置更新之间休息minTime毫秒以节省电量。如果minDistance大于0,则仅当设备移动minDistance米时才会广播位置。要尽可能频繁地获取通知,请将两个参数都设置为0。
后台服务应该注意设置足够高的minTime,以便设备不会因为始终保持GPS或无线无线电而消耗太多电量。特别是,不推荐低于60000ms的值。
调用线程必须是Looper线程,例如调用Activity的主线程。
<强>参数强>
提供商要注册的提供商的名称
minTime 通知的最短时间间隔,以毫秒为单位。此字段仅用作节省电量的提示,位置更新之间的实际时间可能大于或小于此值。
minDistance 通知的最小距离间隔,以米为单位
侦听器一个{#link LocationListener},其onLocationChanged(Location)方法将针对每个位置更新进行调用
修改强>
GPS服务通常是内存饥渴。您需要GPS服务还是只需要查找位置更新? Android为基于位置的服务提供了一个很好的启动doco。 http://developer.android.com/guide/topics/location/obtaining-user-location.html 请尝试按照此doco中的步骤找到最佳用户位置。
确保在适当的时间停止侦听更新。如果一个应用程序即使在没有运行时也试图耗尽电池,用户也不会感到高兴。
尝试将应用程序作为后台任务...即服务或BroadcastReceiver