我需要以编程方式使用GPS获取当前位置.我怎样才能实现它?
我想构建一个以获取用户当前位置为中心的应用程序,然后通过Google Places API找到与他/她关系密切的兴趣点(如酒吧,餐馆等).
在网上搜索一个可以开始的地方时,我遇到了一些使用该LocationManager课程的教程和其他一些使用Google Play服务的教程,以便找到用户所在的位置.
乍一看,他们两个都做同样的事情,但由于我是新手,我有点困惑,我不知道哪种方法最适合我的需要.所以,我想问你:
这两种查找位置的方法(如果有的话)有什么区别?
谷歌似乎最终关闭了获取当前前台应用程序包的所有大门.
在Lollipop更新之后,getRunningTasks(int maxNum)由于这个答案,我使用此代码从Lollipop获取前台应用程序包:
final int PROCESS_STATE_TOP = 2;
RunningAppProcessInfo currentInfo = null;
Field field = null;
try {
field = RunningAppProcessInfo.class.getDeclaredField("processState");
} catch (Exception ignored) {
}
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appList = am.getRunningAppProcesses();
for (RunningAppProcessInfo app : appList) {
if (app.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
app.importanceReasonCode == 0 ) {
Integer state = null;
try {
state = field.getInt( app );
} catch (Exception ignored) {
}
if (state != null && state == …Run Code Online (Sandbox Code Playgroud) 希望找到防止/检测Android上的GPS欺骗的最佳方法.关于如何实现这一点的任何建议,以及可以做些什么来阻止它?我猜测用户必须打开模拟位置欺骗GPS,如果这样做,那么他们可以欺骗GPS吗?
我想我只需要检测是否启用了Mock Locations?还有其他建议吗?
我的应用程序启动时只需要一个粗略的位置服务.
详细地说,我需要应用程序的粗略位置,以便为用户提供附近的商店信息.
该位置不需要不断更新.此外,在这种情况下,粗略定位就足够了.
我希望应用程序自动选择GSM,wifi或GPS,无论哪个可用.
定位服务也应该是一次性的,以节省电话能量.
我该怎么办?
我曾尝试单独使用GPS.
我的问题是我不知道如何停止GPS的持续刷新位置功能.我不知道如何让手机从三种方法中选择一种.
非常感谢一些示例代码或想法.
介绍
在我的应用程序中,我希望获得用户当前所在位置的一次性准确位置.当我FusedLocationProviderApi.getLastLocation有时使用时,这将是null或过时的位置,因为我发现这只是一个缓存的位置,并没有请求新的位置更新.
解决方案是仅请求位置更新一次,如下所示.
LocationRequest locationRequest = LocationRequest.create()
.setNumUpdates(1)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(0);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this)
Run Code Online (Sandbox Code Playgroud)
现在我总是得到一个更准确的位置.
我的问题
如何确定位置更新是否失败?因为我只要求1.
获取位置更新时,将调用此回调
@Override
public void onLocationChanged(Location location) {
}
Run Code Online (Sandbox Code Playgroud)
但是,如果位置更新失败,则不会调用此方法.
我试过了什么
我看到有一个ResultCallback.但是,即使一次性位置更新失败,也始终会调用onSuccess.
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this).setResultCallback(new ResultCallbacks<Status>() {
@Override
public void onSuccess(@NonNull Status status) {
DebugUtils.log("requestLocationUpdates ResultCallback onSuccess + " + status.toString(),true,true);
}
@Override
public void onFailure(@NonNull Status status) {
DebugUtils.log("requestLocationUpdates ResultCallback onFailure + " + status.toString(),true,true);
}
});
Run Code Online (Sandbox Code Playgroud)
其他
运用 com.google.android.gms:play-services-location:8.4.0
感谢您的阅读,请帮帮我.
即使用户的设备已关闭GPS并且不允许应用访问其位置,我也需要确定设备所在的国家/地区(iso3).
我还需要考虑没有SIM卡的平板电脑,因此不能使用telephonyManager.
出于这个原因,我不相信我可以使用位置管理器(也是因为这些原因:LocationManager requestLocationUpdates不起作用)
我认为我需要的方法是向第三方ip位置api发出简单的HTTP请求:例如 http://www.ipinfodb.com/ip_location_api.php 或 https://freegeoip.net
这是最好的方法吗?什么是最好的开放api使用?
我们有一个应用程序,在用户操作尝试获取位置修复.它可以监听GPS和网络,并且具有基于时间/准确度的决策矩阵,以确定何时停止收听以及返回什么修复.
我们偶尔会注意到一种非常奇怪的行为.我们使用经典的方式来查看修复程序的年龄,如下所示:
long age = now - newLocation.getTime();
if(age >= prefs.getLocationMaxAge()){
Log.d(TAG, "location too old.");
return;
}
Run Code Online (Sandbox Code Playgroud)
但有时候,根据返回的时间戳,从操作系统返回的location.getTime的年龄可能是15-20秒,尽管我们可以肯定它已经很老了.例如,如果经度/纬度修正来自手机30分钟前的位置!
它似乎既发生在Wi-Fi和网络上,也不发生在GPS上.对我来说,这完全是疯了.有没有其他人看过这个,有什么办法吗?
我们已经在几款不同的手机上使用它,最近的一款是三星Galaxy S II.
非常欢迎帮助.
编辑:要非常清楚,问题是操作系统调用"onlocationchanged"回调,其时间戳可能是几秒钟,当我确定"新"中的经度/纬度时修复是手机至少没有使用30分钟的地方.
这使得很难准确地确定手机的位置......