我发现位置服务耗尽我的电池。但我认为这不是因为位置服务处于开启状态,这是因为某些应用程序使用该服务很多。有什么办法可以找到,哪个应用程序集的位置服务错误(高负载)?我现在可以使用位置服务获得应用程序列表吗? 非常感谢您的帮助。哪些应用程序正在使用位置服务?
回答
我想你的意思是像在后台运行的服务和使用GPS?所以你不要自己激活GPS,但它仍然在运行? 在这种情况下,我不知道要获取所有允许在后台使用GPS的应用。 你可以进入你的设置 - >应用程序,并检查允许哪些应用程序使用GPS的权限。
一个典型的背景GPS用户是Facebook应用程序(或谷歌+我猜)。 希望这有助于。
编辑:另外,你可以禁用GPS,当你不需要它,这样没有应用程序有可能在后台使用它。
据我所知,没有简单的方法来获取访问LocationProvider的应用程序列表。但是,一种简单的诊断方法是杀死逐个请求ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION权限的应用程序。
许多应用通过像onLocationChanged(...)这样的回调来获取位置数据,这使得几乎不可能在不修改Android系统的情况下识别您的问题。您可以修改位置服务以记录uid(通过Binder.getCallingUid())以获取使用位置服务的当前应用程序。这不是很困难,但很重。
编辑:
有下框架/基/服务/ JAVA/COM /安卓/服务器LocationManagerService.java。
一般来说,根据它的Location Strategies,有几种方法可以在Android中获取位置信息。
LocationManager.requestLocationUpdates
你可以看看这LocationManagerService.java实施。该方法从客户端接收ILocationListener(Binder对象),如果它接收到位置更新,则稍后调用此侦听器。
@Override
public void requestLocationUpdates(LocationRequest request, ILocationListener listener,
PendingIntent intent, String packageName) {
if (request == null) request = DEFAULT_LOCATION_REQUEST;
checkPackageName(packageName);
int allowedResolutionLevel = getCallerAllowedResolutionLevel();
checkResolutionLevelIsSufficientForProviderUse(allowedResolutionLevel,
request.getProvider());
LocationRequest sanitizedRequest = createSanitizedRequest(request, allowedResolutionLevel);
final int pid = Binder.getCallingPid();
final int uid = Binder.getCallingUid();
Receiver recevier = checkListenerOrIntent(listener, intent, pid, uid, packageName);
// providers may use public location API's, need to clear identity
long identity = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
requestLocationUpdatesLocked(sanitizedRequest, recevier, pid, uid, packageName);
}
} finally {
Binder.restoreCallingIdentity(identity);
}
}
基本上,你可以获取应用程序的UID在这种方法来知道有多少应用程序正在请求位置更新。但是你还应该记住看看removeUpdates方法。
LocationManager.getLastKnownLocation
您也可以登出应用程序的UID在这个方法的实现。
修改代码后,您可以编译整个Android项目,安装您的应用程序并获得您的结果。
好的,感谢您的建议,我会尝试杀死方法,但我有点害怕该应用程序可以一次又一次地启动,它可能很难找到它,如果我不想卸载所有这些应用程序(也有一些应用程序是不可能卸载的) 你能否澄清一点我如何修改位置服务?我不确定我是否遵守 – Michal 2013-02-19 08:53:32
通常,应用程序如果没有意图(不是广播)发送给它,将无法开始。为了修改位置服务,我将更新答案。 – StarPinkER 2013-02-19 09:05:00
谢谢,我将尝试实现这一点:) – Michal 2013-02-19 10:06:40
- 1. Netflix正在使用哪些AWS服务?
- 2. 应用程序的哪些部分应该在服务中?
- 3. 应用程序的位置在哪里?
- 4. 了解哪些应用程序正在使用电池寿命
- 5. 应该在远程服务器上使用哪些Java技术?
- 6. 位置服务应用程序 - Xcode“停止”让位置服务永远运行
- 7. 位置本地设置应用程序启用的服务
- 8. Apple Geofencing failure当位置服务设置为“仅在使用应用程序时”
- 9. 用于使用.NET Web服务的VB-ASP应用程序有哪些选项?
- 10. 如何知道应用程序提供了哪些服务?
- 11. 具有自动“服务”的Web应用程序 - 哪些选项?
- 12. 如何仅从该应用程序的应用程序禁用位置服务?
- 13. 网络服务和服务器程序的Android位置感知应用程序
- 14. 使用WCF服务应用程序模板,“服务”信息在哪里
- 15. 哪些应用程序服务器符合Java EE 6(完整配置文件)?
- 16. 在浏览应用程序时运行位置服务
- 17. 在android中的位置服务的应用程序
- 18. 查找哪些应用程序使用Profiler跟踪应用程序名称列来访问我的服务器
- 19. 应用程序设置不包含位置服务
- 20. 当位置服务设置为“开”时,应用程序崩溃
- 21. 查看应用程序正在调用哪些com端口?
- 22. 重新启用iPhone应用程序的位置服务
- 23. 如何找出哪些应用程序正在使用Web服务器上的最多资源(Win2003)
- 24. 识别调用位置服务的应用程序 - Android位置框架
- 25. 在我的应用程序修改我使用位置服务的Android设备
- 26. 我应该在DroneDeploy应用程序中使用哪些样式?
- 27. WCF/WebSerices应该放在Silverlight应用程序的哪个位置?
- 28. Django正在使用哪个服务器?
- 29. 从应用程序服务器根服务GWT应用程序
- 30. 哪些dll正在使用?
此问题与编程/软件开发有关。我需要以编程方式查找哪个应用程序重载位置服务。 – Michal 2013-02-20 12:02:40