如何在没有 GPS 的情况下连续获取用户位置
Posted
技术标签:
【中文标题】如何在没有 GPS 的情况下连续获取用户位置【英文标题】:How to get user location continuosly without GPS 【发布时间】:2015-05-16 15:36:28 【问题描述】:关于这个问题有一些问题,但我找不到任何没有问题的方法。我用 GPS 提供商实现了项目的版本,现在我想实现一个版本,它可以在没有 GPS 的情况下找到用户的位置,只需使用网络提供商(如 Wifi)。我试过了,但它不起作用(我无法以任何方式收到“完成”消息):
public class MapsActivity extends FragmentActivity
double latitude;
double longitude;
LocationManager locationManager;
android.location.LocationListener networkLocationListener;
Location location;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
networkLocationListener = new android.location.LocationListener()
public void onLocationChanged(Location location)
latitude = location.getLatitude();
longitude = location.getLongitude();
Log.d("->", "done.");
public void onStatusChanged(String provider, int status, Bundle extras)
public void onProviderEnabled(String provider)
public void onProviderDisabled(String provider)
;
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocationListener);
...
另外,这是我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.doruk.myapplication">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--
The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
Google Maps Android API v2, but are recommended.
-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/orange"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
</application>
</manifest>
你能看出问题吗?你现在有什么建议?有没有更好的办法?
【问题讨论】:
【参考方案1】:多鲁坎·阿尔斯兰
- 您可以使用 GoogleclientAPi,因为 locationmanager 已经
已弃用
- 使用 FusedLocationAPi 它会自动发现提供者以找到位置。
- https://developer.android.com/google/auth/api-client.html 看看
在这
- 这是一个例子protected void createLocationRequest()
LocationRequest mLocation = LocationRequest.create();
GoogleAPiClient mgoogle;
/*
在这里输入代码
* Set the update interval
*/
mLocation.setSmallestDisplacement(500); // 2km
mLocation.setInterval(180000);// 3 min
mLocationRequest.setFastestInterval(120000);// 2 min
mLocation.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (mgoogle == null)
mgoogle = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API).addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).build();
mgoogle.connect();
【讨论】:
信息丰富的答案,但这不是我想要的。我需要找到一种在没有 GPS 的情况下获取位置的方法,因此间接地没有位置服务。我只需要使用 Wifi 连接来获取位置。例如,如果您检查了 Yandex 地图,当您关闭定位服务但保持打开 Wifi 时,它会继续获取您当前的位置并将其显示在地图上。考虑两种获取位置的方法:1. 位置服务,2. Wifi。 Yandex Maps 仅适用于 1 或 2,并且适用于 1 和 2,但我当前的应用程序适用于 1,并且存在 1 和 2,也应该仅适用于 2。 @DorukhanArslan link 你在问这样的问题吗? 您的答案和此链接中给出的答案都必须严格使用位置服务,这会过度消耗电池。我用华硕 Zenphone 测试我的应用程序,这款手机没有 GPS 选项卡。即,它在打开位置服务选项时触发 GPS。我已经编写但没有放在这里的代码是您建议的技术的完整版本。我提出的问题代码与您在此链接中提供的代码相同。不幸的是,它们都依赖于位置服务的存在。当且仅当 Wifi 连接处于活动状态时,我才需要获取位置。 顺便说一句,我可能表达不清楚。我只想在 GPS、定位服务和其他东西关闭但 Wifi 连接打开时获取位置。到目前为止,我找不到任何方法来做到这一点。如果你愿意,我也可以把整个项目放在这个问题上。 不需要我也找到你的答案我会尽快回复我得到答案【参考方案2】:您可以使用用户的 IP 地址来获取大致位置。
【讨论】:
以上是关于如何在没有 GPS 的情况下连续获取用户位置的主要内容,如果未能解决你的问题,请参考以下文章
如何创建一个按钮,该按钮将在没有侦听器的情况下获取用户的位置
如何在不使用 GPS 的情况下获取 Android 设备的当前城市名称?
在没有互联网的情况下使用 iPhone GPS 更新用户位置
如何忽略 android 中的 irelevent gps 位置更新?