gpt4 book ai didi

android - 在某些设备上未调用 onLocationChanged

转载 作者:IT老高 更新时间:2023-10-28 23:14:21 24 4
gpt4 key购买 nike

这个问题已经被问过很多次了,但我找不到始终有效的解决方案。

我正在使用 Fused 位置提供程序开发应用程序。在 onConnected() 方法中,我请求位置更新,一旦生成位置修复并调用 onLocationChanged(),应用程序逻辑就会启动。 (请引用我下面的代码)。

问题 onLocationChanged() 方法永远不会在某些设备上调用。我使用三星 Tab 2 和三星 Galaxy Grand 进行测试。此代码在 Tab 2 上运行良好,但不适用于 Grand。不起作用,我的意思是 locationClient 已连接,但永远不会调用 onLocationChanged()

之前,我使用位置管理器来获取位置,在该实现中,发生了同样的问题。因此,我尝试实现融合位置提供程序,但仍然遇到同样的问题。

谁能帮我解决这个问题?我在这里有什么遗漏吗?

public class MainActivity extends Activity implements GooglePlayServicesClient.ConnectionCallbacks, OnConnectionFailedListener, LocationListener {

LocationClient locationclient;
LocationRequest lr;
Location loc1;
static String address;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

locationclient = new LocationClient(this,this,this);
locationclient.connect();

}

@Override
public void onConnected(Bundle arg0) {
// TODO Auto-generated method stub

lr=LocationRequest.create();
lr.setInterval(100);
locationclient.requestLocationUpdates(lr, this);
Log.d("LocationClient","On Connected");
}

@Override
public void onDisconnected() {
// TODO Auto-generated method stub
locationclient.disconnect();

}

@Override
public void onConnectionFailed(ConnectionResult arg0) {
// TODO Auto-generated method stub

}

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

// Application Logic

Log.d("LocationClient","Last Known Location LC:" + loc.getLatitude() + "," + loc.getLongitude());
}
}

最佳答案

我在 Galaxy Nexus 上观察到了相同的行为,并发现了导致 onLocationChanged() 未被调用的两件事。有

  1. 系统设置中未启用对应的位置源。对于 PRIORITY_HIGH_ACCURACY,必须启用 GPS 卫星,对于 PRIORITY_BALANCED_POWER_ACCURACY,必须启用 Wi-Fi 和移动网络位置

  2. 即使是已启用的位置源,也可能没有可用的有效位置信息。例如,PRIORITY_HIGH_ACCURACY 源已启用,但没有(或不好)GPS 接收(例如设备在建筑物内)。或者 PRIORITY_BALANCED_POWER_ACCURACY 源已启用,但 Wi-Fi 和移动数据均已关闭。在这些情况下,无法检测到位置,并且不会调用 onLocationChanged()

要修复 #1,我必须在连接到 Google 服务 API 之前检查所需的位置源是否已启用,如果它们已关闭,我会通知用户要求他/她允许位置访问。

为了解决 #2,我决定使用 LocationRequest.setExpirationDuration()。我将超时设置为大约 10 秒,并在调用 requestLocationUpdates() 后立即发布一个延迟相同 10 秒的回调。如果在 requestLocationUpdates() 之前调用延迟回调,这意味着由于原因 #2 而无法检测到位置。我重试了 3 次,然后向用户显示错误消息。

Android 文档在这个地方不是很好,这就是为什么我希望这会有所帮助。

关于android - 在某些设备上未调用 onLocationChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18109542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com