我有一些Android代码,需要快速获得最佳可用位置,从GPS、网络或任何可用的东西。准确性不如速度重要。

获得最佳的可用位置无疑是一项非常标准的任务。但是我找不到任何代码来演示它。Android位置代码要求指定标准、注册更新和等待--如果您有详细的标准,并且不介意等待,这是很好的。

但是我的应用程序需要更多地工作,就像地图应用程序第一次定位你时一样--从任何可用的提供者那里工作,只需检查位置是否过时或空。

我曾尝试使用我自己的代码来完成这个任务,但是我遇到了问题。(如果这有任何区别的话,它就在IntentService中进行上传。我已经把所有的信息代码都包括了。)这个代码有什么问题?

@Override
protected void onHandleIntent(Intent arg0) {
    testProviders();
    doUpload();
}
private boolean doUpload() {
       int j = 0;
       // check if we have accurate location data yet - wait up to 30 seconds
       while (j < 30) {
           if ((latString == "") || (lonString == "")) {
               Log.d(LOG_TAG, "latlng null");
               Thread.sleep(1000);
               j++;
       } else {
                Log.d(LOG_TAG, "found lat " + latString + " and lon " + lonString);
            break;
       }
       //do the upload here anyway, with or without location data
       //[code removed for brevity]
}
public boolean testProviders() {
    Log.e(LOG_TAG, "testProviders");
    String location_context = Context.LOCATION_SERVICE;
    locationmanager = (LocationManager) getSystemService(location_context);
    List<String> providers = locationmanager.getProviders(true);
    for (String provider : providers) {
        Log.e(LOG_TAG, "registering provider " + provider);
        listener = new LocationListener() {
            public void onLocationChanged(Location location) {
                // keep checking the location - until we have
                // what we need
                //if (!checkLoc(location)) {
                Log.e(LOG_TAG, "onLocationChanged");
                locationDetermined = checkLoc(location);
                //}
            }
            public void onProviderDisabled(String provider) {
            }
            public void onProviderEnabled(String provider) {
            }
            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
            }
        };
        locationmanager.requestLocationUpdates(provider, 0,
                0, listener);
    }
    Log.e(LOG_TAG, "getting updates");
    return true;
}
private boolean checkLoc(Location location) {
    float tempAccuracy = location.getAccuracy();
    int locAccuracy = (int) tempAccuracy;
    Log.d(LOG_TAG, "locAccuracy = " + locAccuracy);
    if ((locAccuracy != 0) && (locAccuracy < LOCATION_ACCURACY)) {
        latitude = location.getLatitude();
        longitude = location.getLongitude();
        latString = latitude.toString();
        lonString = longitude.toString();
        return true;
    }
    return false;
}
public void removeListeners() {
    // Log.e(LOG_TAG, "removeListeners");
    if ((locationmanager != null) && (listener != null)) {
        locationmanager.removeUpdates(listener);
    }
    locationmanager = null;
    // Log.d(LOG_TAG, "Removed " + listener.toString());
}
@Override
public void onDestroy() {
    super.onDestroy();
    removeListeners();
}

不幸的是,这会找到网络提供程序,但只有输出latlng null30次-它似乎从来没有得到一个位置,在任何地方。我甚至没有收到locationChanged...

从DDMS中我可以看到输出如下:

NetworkLocationProvider: onCellLocationChanged [305,8580]
NetworkLocationProvider: getNetworkLocation(): returning cache location with accuracy 75.0

似乎暗示网络提供商确实有一些位置信息。

有人能帮忙吗?

火星救援队长火星救援队长提问于
龙珠粉丝255学生回答于

回答过的其他问题

智能网优如何提升手游用户游戏体验?

据我所知,智能网优也提供非常精准的测试服务,在全国所有的省份所有的运营商都有部署一个测试节点,测试用户到骨干网最边缘节点的速度是多少,也对到路由器网关进行测试,以及到游戏服务器进行测试,得出每段网络的延时分别是多少。

对于直播答题类APP的欺诈违法行为目前都采取了哪些应对措施?

在直播答题火爆网络以后引来了形形色色的“垃圾内容”,在答题时出现了许多涉黄涉政等敏感词刷屏,脏话,甚至机器恶意刷屏等等低俗的垃圾弹幕,甚至有人用用户昵称,用户头像设置涉黄涉政的敏感词,这位直播答题平台的监管带来了很大压力。不过针对此类问题,众平台纷纷采取了操作,在后台针对色情,涉...... 展开详请

如何搭建小程序音视频?

小程序账号怎么填写?

……你不说是那块的问题,截图和链接都没有,还指望别人给你解决问题?

智能音箱的工作原理是什么?

目前的智能音箱多基于语音控制,其基本交互流程可以用图1 概括:1)用户通过自然语言向音箱提出服务请求或问题 2)音箱拾取用户声音(音箱本地完成)并分析(一般在服务器端完成)3)音箱通过语言播报(音箱端)和 APP 推送(关联的手机等)对用户的请求进行反馈。 [图片] ... 展开详请

如何在javascript中将整数格式化为特定长度?

我认为最简单的方法是: ("000" + num).slice(-4) 填充数字是字符串。 向字符串添加数字时,会将其转换为字符串。 字符串具有方法切片,可以返回字符串的固定长度片段。 如果length为负,则返回的字符串将从字符串的末尾开始切片。 测试: var num=12...... 展开详请

扫码关注云+社区