在不使用GPS或互联网的情况下获取Android用户的当前位置

时间:2011-07-14 14:01:04

标签: android geolocation gps android-gps

是否可以在不使用GPS或互联网的情况下获取用户的当前位置?我的意思是在移动网络提供商的帮助下。

8 个答案:

答案 0 :(得分:82)

您要做的是使用LocationManager.NETWORK_PROVIDER代替LocationManager.GPS_PROVIDER获取排名。 NETWORK_PROVIDER将在GSM或wifi上解析,这可用。显然,关闭wifi,将使用GSM。请记住,使用细胞网络准确到500米。

http://developer.android.com/guide/topics/location/obtaining-user-location.html有一些非常好的信息和示例代码。

完成OnCreate()中的大部分代码后,添加以下内容:

// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
      makeUseOfNewLocation(location);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

您还可以让您的活动实施LocationListener课程,从而在您的活动中实施onLocationChanged()

答案 1 :(得分:15)

通过获取getLastKnownLocation,您实际上并未自行启动修复程序。

请注意,此可以启动提供程序,但如果用户以前曾获得过某个位置,我认为不会。文档在这方面并不是很清楚。

根据docs getLastKnownLocation:

  

返回指示上一个已知位置的数据的位置   修复从给定的提供者获得。这可以不用   启动提供者。

以下是一个快速摘录:

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import java.util.List;

public class UtilLocation {
    public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
        LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        Location utilLocation = null;
        List<String> providers = manager.getProviders(enabledProvidersOnly);
        for(String provider : providers){

            utilLocation = manager.getLastKnownLocation(provider);
            if(utilLocation != null) return utilLocation;
        }
        return null;
    }
}

您还必须向AndroidManifest.xml

添加新权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

答案 2 :(得分:3)

可以在不使用GPS和网络提供商的情况下获取用户当前位置。

1。 Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"

2。Click Here For Your Reference

答案 3 :(得分:3)

boolean gps_enabled = false;
boolean network_enabled = false;

LocationManager lm = (LocationManager) mCtx
                .getSystemService(Context.LOCATION_SERVICE);

gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

Location net_loc = null, gps_loc = null, finalLoc = null;

if (gps_enabled)
    gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
    net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

if (gps_loc != null && net_loc != null) {

    //smaller the number more accurate result will
    if (gps_loc.getAccuracy() > net_loc.getAccuracy()) 
        finalLoc = net_loc;
    else
        finalLoc = gps_loc;

        // I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)

} else {

    if (gps_loc != null) {
        finalLoc = gps_loc;
    } else if (net_loc != null) {
        finalLoc = net_loc;
    }
}

答案 4 :(得分:3)

不,您目前无法使用GPS或互联网获取位置。

基于WiFi,移动电话或蓝牙的定位技术借助于不断更新的大型数据库。设备会扫描发射器ID,然后通过互联网查询将其发送到Google,Apple或Skyhook等服务。该服务以基于先前已知位置的无线调查的位置进行响应。如果没有Internet访问,您必须拥有此类数据库的本地副本并使其保持最新。对于全球使用,这是非常不切实际的。

理论上,移动提供商只能提供本地数据服务,但无法访问互联网,然后回复移动设备的位置查询。移动服务提供商不这样做;没有人愿意为这种受限制的数据访问付费。如果您通过移动服务提供商提供数据服务,则可以访问互联网。

简而言之,使用LocationManager.NETWORK_PROVIDER或android.hardware.location.network来获取位置需要使用互联网。

使用上一个已知位置要求您最近拥有GPS或互联网访问权限。如果您刚上网,可能您可以调整您的位置或设置以重新上网。如果您的设备没有GPS或互联网访问权限,最后一个已知的位置功能将无法帮助您。

如果没有GPS或互联网,您可以:

  1. 拍摄夜空的照片并使用当前时间根据星图估算您的位置。这可能需要额外的设备来确保正确测量图片的角度。
  2. 使用加速度计从已知位置开始跟踪位置。在这种方法中误差的积累使得它在大多数情况下都是不切实际的。

答案 5 :(得分:1)

您是否看过Google Maps Geolocation Api? Google Map Geolocation

这是简单的RestApi,您只需要POST一个请求,该服务将返回一个精确度为米的位置。

答案 6 :(得分:0)

您可以使用TelephonyManager来做到这一点。

答案 7 :(得分:-1)

似乎可以在不使用GPS的情况下跟踪智能手机。

来源:

小学:"PinMe: Tracking a Smartphone User around the World"

中学:"How to Track a Cellphone Without GPS—or Consent"

我还没有找到团队最终代码的链接。当我这样做时,如果另一个人没有这样做,我会发布。