我已将Android Java版本更改为8,以简化一些代码编写。我遇到的一个问题(我无法弄清楚)是,'this' is not available当它们位于lambda表达式中时,我在类属性的调试器中得到了它。如标题中所述,我已经更新到最新的Android Studio 3.3。
我一直在寻找一段时间,试图找出我做错了什么,但是没有运气。
我遇到的另一个问题是,在lambda(通常是匿名的)中,调试器无法在if语句上停止(从视觉上看,断点红色圆圈永远不会打勾),我很确定自己可以做得到。Android Studio 3.3中是否有导致此的更改(或设置)?我想念什么?
任何想法/解决方案将不胜感激。
编辑:
还有一个关于if断点的问题。那里的OP给出了一个我不满意的非常通用的答案,也没有回答为什么。
我注意到的是,其中具有复杂逻辑的if语句不会获得活动断点。因此,an if (object.getSomething() == something)无效,但如果将其分配给一个值,然后在比较中使用该值,则效果很好...谜团加深了。
经过大量阅读并与自己进行斗争之后,我必须询问我更好的同行。
我有一种无法解释的行为FusedLocationClient。
我想获取向用户显示一些信息的位置(仅一个实例)。为此我称之为:
mFusedLocationClient.getLastLocation().addOnSuccessListener(...)
如果 的位置getLastLocation()为空。我想“快速启动”客户端来为我获取一个位置。
LocationRequest locationRequest = new LocationRequest();
locationRequest.setFastestInterval(5000);
locationRequest.setInterval(10000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
Timber.d("OnLocationResult entered");
if (locationResult != null && !locationResult.getLocations().isEmpty())
findCurrentArea();
}
@Override
public void onLocationAvailability(LocationAvailability locationAvailability) {
Timber.d("OnLocationAvailability entered");
super.onLocationAvailability(locationAvailability);
}
};
mFusedLocationClient.requestLocationUpdates(locationRequest, mLocationCallback, null);
Run Code Online (Sandbox Code Playgroud)
首先我要说的是,我也使用过来LocationSettingsRequest检查设置,并且总是成功。
奇怪的部分:
onLocationAvailability()被调用两次。第一次响应是 true 但onLocationResult()没有被调用,然后我得到了 false 的可用性!有几次我不止一次地接到这个电话。
在使用 Android 6-8 的多个设备中观察到上述行为。搭载 Android 9 的 Pixel 3 可以按预期提供位置。
如果我在有问题的设备上启动 Google 地图并打开位置,在这种情况下地图也无法显示位置。如果我关闭该位置,我会看到带有“?”的地图位置按钮。在里面。按下地图中的按钮,我会弹出一个窗口,提示我应该打开位置。好的,我的应用程序中的位置服务也恢复了!!!
如果我使用失败案例LocationSettingsRequest …
我正在开发一个项目,我们正在尝试跟踪设备的位置并保留数据供以后使用.在我谈论这个问题之前,我想提供一些背景知识.
通过搜索StackExchange和Google以及其他任何地方,我得出的结论是,几乎不可能使用Fused Location API获取有关卫星的信息(Google的工作很好).
大多数人使用的方法是在Fused位置旁边实际使用LocationManager来获取GPS状态.我的第一个问题是:我们怎么能100%确定LocationManager提供的数字与Fused Location给我们的数据同步?Fused Location是否在内部使用Manager?
而现在问题.该应用程序正在使用"永远在线"粘性服务来获取位置,无论如何.当没有卫星时,一切都按预期工作.将设备放置在可以看到卫星的位置,它似乎没有锁定.使用调试器,GpsStatus.getSatellites()带来一个空列表.现在,在没有移动设备的情况下,我启动了具有GPS型罗盘方案的应用程序Compass(由Catch.com提供,因为有很多).那个锁定卫星的速度非常快,从那时起我的应用程序也会报告卫星.如果指南针关闭,那么应用程序会卡在指南针提供的最后一个数字上!我个人用于测试的设备是带有最新官方更新的Nexus 7 2013(Android 6.0.1).
这是一些代码:
public class BackgroundLocationService extends Service implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
GpsStatus.Listener,
LocationListener {
// Constants here....
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
private LocationManager locationManager;
// Flag that indicates if a request is underway.
private boolean mInProgress;
private NotificationManagement myNotificationManager;
private Boolean servicesAvailable = false;
//And other variables here...
@Override
public void onCreate()
{
super.onCreate();
myNotificationManager = new NotificationManagement(getApplicationContext());
myNotificationManager.displayMainNotification();
mInProgress = false;
// Create the LocationRequest object
mLocationRequest = …Run Code Online (Sandbox Code Playgroud) gps android locationmanager fusedlocationproviderapi android-fusedlocation
我正在研究一个项目的 GPS 部分,我想通过社区获得一些东西。我搜索了所有典型的 GPS“跳跃和漂移”,并努力改进我得到的数据,但上周我得到了一些非常奇怪的数据,我无法确定。
该应用程序基本上有一个前台服务,用于跟踪位置,然后在计时器上上传该数据。当然,我们拥有所需的所有适当权限,并且还有一个过滤器可以清除准确性非常差的数据并“检测”停止。一切都进展顺利,直到您在这里看到的事情发生为止。
这些是我得到的一些数据点。一幅“美丽”的图案图。同样的情况也发生在另一个地方,但没有到这个程度。我检查了数据以找出为什么我的过滤器甚至没有尝试让事情变得更好,但我发现它无法做到这一点。所有的点都有适当的速度、航向和准确性,并且出于所有意图和目的,我可以说这个人实际上完成了整个事情。问题是这并没有发生。这款手机(三星 J5)可能不是最好的,它一直放在一个房间里。根据我对融合位置提供商的理解,如果过程中不涉及 GPS,则不会报告速度。我们假设手机所在的位置实际上可以接收到 GPS 信号。我可以看到它跳来跳去,但在附近散步吗?
我知道并理解 Android(以及任何其他平台)中的位置可能是一个非常复杂的问题,由许多不同的变量组成,这些变量主要从提供这些变量的硬件开始,但是我们如何解释这种突然涌入的疯狂,即使看似对吧,数据?我们是否可以认为,长时间保持定位服务正常运行实际上会使系统陷入困境或“疲劳”?到目前为止已提供正常数据的同一设备如何突然提供此数据集?
添加到问题中。数据中还存在一两次大约 2 分钟的长延迟(间隔设置为 15 秒和 10 秒(最快))。我 100% 确定该服务没有重新启动或类似的情况,因为我正在为此进行记录。
任何类型的见解都将不胜感激,如果有任何方式/方法/算法您可以建议研究“修复”这种行为,那就太好了。预先感谢您,并对这个长问题表示歉意。我需要提供适当的背景。
编辑:这并不是我的问题的真正答案,为什么这种行为突然出现,所以我将其添加到此处作为尝试缓解问题的方法,至少是缓解一点问题。我决定使用 Google 的 ActivityRecognitionAPI(捆绑在位置 API 中,因此不需要更多依赖项)并将其输出与我现有的过滤器合并,以期“修复”“错误”位置数据。
不过,如果有人仍然可以给我一个很好的答案(帮助我理解)是否存在运行时间长或其他硬件(或软件)因素(不包括手机上的 GPS 芯片损坏的典型知识)等因素引起像上面提到的那样奇怪和意想不到的行为将不胜感激。
(当然,我们总是可以说 - “这是手机故障” - 然后就可以了;))
gps android location fusedlocationproviderapi android-fusedlocation