彻底解决ndroid没法定位这一顽固问题

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

大家去网上搜索Android定位location为null没法定位问题。预计有一大堆文章介绍怎样来解决。可是最后大家发现基本没用。本文将从Android定位实现原理来深入分析没法定位原因并提出真正的解决方式。在分析之前,我们肯定得先看看android官方提供的定位SDK。

/*

**系统内容提供器介绍

**一共为四种方式"passive","network","fused","gps"

** "gps":GPS_PROVIDER(GNSS) GNSS HAL 接口和芯片打交道

** "network":NETWORK_PROVIDER 依赖设备厂商的具体实现,Android 默认实现依赖 Google 提供的 GMS **  实现国内无法使用;一般厂商会实现为通过基站 / WIFI / 蓝牙进行融合定位

** "fused":调用 GMS(谷歌移动服务) 进行定位,国内用不了

*/

默认Android GPS定位实例

获取LocationManager:

选择Location Provider:

Android系统存在多种provider,各自是

GPS_PROVIDER:

这个就是手机里有GPS芯片,然后利用该芯片就能利用卫星获得自己的位置信息。可是在室内,GPS定位基本没用,非常难定位的到。

NETWORK_PROVIDER:

这个就是利用网络定位,一般是利用手机基站和WIFI节点的地址来大致定位位置,

这样的定位方式取决于server,即取决于将基站或WIF节点信息翻译成位置信息的server的能力。因为眼下大部分Android手机没有安装google官方的location manager库。大陆网络也不同意。即没有server来做这个事情,自然该方法基本上没法实现定位。

PASSIVE_PROVIDER:

被动定位方式。这个意思也比較明显。就是用现成的,当其它应用使用定位更新了定位信息。系统会保存下来。该应用接收到消息后直接读取就能够了。比方假设系统中已经安装了百度地图,高德地图(室内能够实现精确定位)。你仅仅要使用它们定位过后。再使用这样的方法在你的程序肯定是能够拿到比較精确的定位信息。

用户能够直接指定某一个provider

也能够提供配置,由系统依据用户的配置为用户选择一个最接近用户需求的provider

Criteria crite = new Criteria();

获取Location

然后你会发现,这个返回的location永远为null,你自然没法定位。然后网上到处是咨询为啥

获得的location为null,相同网络到处是解决问题的所谓解决方式。

所谓解决方式

网上有人说。一開始location是非常有可能是null的,这是由于程序还从来没有请求 过,仅仅

需又一次请求更新location,并注冊监听器以接收更新后的location信息。

LocationListener locationListener = new LocationListener() {

@Override

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

@Override

public void onProviderEnabled(String provider) {

@Override

public void onProviderDisabled(String provider) {

@Override

public void onLocationChanged(Location location) {

Log.d(TAG,"Location longitude:"+ longitude +" latitude: "+ latitude );

};

然后你发现onLocationChanged永远不会被调用,你仍然没法获取定位信息。

为什么就没法获取到location呢?

事实上在上面我已经提到了,全部上面的解决的方案都没有解决根本问题,那就是当你在室内

开发时。你的手机根本就没法获取位置信息,你叫系统怎样将位置信息通知给你的程序。所以

要从根本上解决问题,就要解决位置信息获取问题。刚刚也提到了,仅仅有NETWORK_PROVIDER

这样的模式才是室内定位可靠的方式,仅仅只是因为大陆的怪怪网络,且大部分厂商也不会用

google的服务,这样的定位方式默认是没法用的。那怎么办?好办,找个替代的服务商就能够

了,百度的位置信息sdk就能够解决问题。

它的基本原理在上面已经提到过了,就是搜集你的wifi节点信息和你的手机基站信息来定位。

真正的解决方式,使用百度位置定位SDK

当然大家能够在官网下载,这样能够下载到最新的sdk

SDK使用:

3.  改动AndroidManifest文件,在该文件中加入例如以下配置

<service

android:enabled="true"

android:process=":remote" >

</service>

<meta-data

android:value="xxxxx " />

上面meta-data中value的值改为你自己的密钥

代码里调用sdk:

public class LocationUtil {

private final static boolean DEBUG = true;

private final static String TAG = "LocationUtil";

private static LocationUtil mInstance;

private BDLocation mLocation = null;

private MLocation  mBaseLocation = new MLocation();

public static LocationUtil getInstance(Context context) {

if (mInstance == null) {

mInstance = new LocationUtil(context);

return mInstance;

Context mContext;

String mProvider;

public BDLocationListener myListener = new MyLocationListener();

private LocationClient mLocationClient;

public LocationUtil(Context context) {

initParams();

public void startMonitor() {

if (DEBUG) Log.d(TAG, "start monitor location");

} else {

Log.d("LocSDK3", "locClient is null or not started");

public void stopMonitor() {

if (DEBUG) Log.d(TAG, "stop monitor location");

public BDLocation getLocation() {

if (DEBUG) Log.d(TAG, "get location");

return mLocation;

public MLocation getBaseLocation() {

if (DEBUG) Log.d(TAG, "get location");

return mBaseLocation;

private void initParams() {

LocationClientOption option = new LocationClientOption();

public class MyLocationListener implements BDLocationListener {

@Override

public void onReceiveLocation(BDLocation location) {

if (location == null) {

return ;

mLocation = location;

StringBuffer sb = new StringBuffer(256);

if (DEBUG) Log.d(TAG, "" + sb);

public void onReceivePoi(BDLocation poiLocation) {

public class MLocation {

public double latitude;

public double longitude;

当然别忘了在setting里将gps定位打开

/********************************

* 本文来自博客  “爱踢门”

******************************************/

THE END
0.AndroidGPS允许使用GPS定位信息if(requestCode==0x123&&grantResults.length==1&&grantResults[0]==PackageManager.PERMISSION_GRANTED){// 创建LocationManager对象locManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);LocatjvzquC41yy}/lrfpuj{/exr1r1jg6A
1.Android系统GPS定位实现android查找定位本文详细介绍Android设备上实现GPS定位的方法,包括三种定位方式的特点、获取经纬度的具体步骤、监听位置变化的实现,以及必要的权限配置。 一、定位方式简介 定位基本分为三种方式,特点如下: 1.wifi定位:IP地址定位,根据ip地址查询实际的地理位置,因为动态获取ip的操作,定位不准确 jvzquC41dnuh0lxfp0tfv8W[uj{bpp4ctvodnn4fgvgjn|4;24<64?:
2.AndroidGPS定位功能实现示例简介:在Android平台上实现GPS定位是开发位置相关应用的基础。本文通过”LocationDemo”示例程序,指导开发者如何在Android Studio环境下通过GPS服务获取设备的实时经纬度坐标,并详细介绍了实现该功能的必要步骤和关键知识点。包括如何在AndroidManifest.xml中声明权限、在Activity中处理权限请求、获取LocationManager实例、实现LocatijvzquC41dnuh0lxfp0tfv8|gkzooa;;;298358ftvkimg8igvcomu866;5:46:>
3.Android中GPS定位的用法实例Android这篇文章主要介绍了Android中GPS定位的用法实例,是Android程序设计中比较经典的应用,需要的朋友可以参考下jvzquC41yy}/lk:30pku1jwvkerf1>99234ivv
4.授權Google地球存取你的位置|GoogleEarth|Googlefor視需要開啟「使用精確位置」。否則系統會使用概略位置。 在地球上尋找自己 在Android 手機或平板電腦上,開啟 Google 地球應用程式。 輕觸藍色的「探索地球」按鈕。 輕觸右下方的「我的位置」圖示location_searching。 變更定位模式 你可以變更定位模式,確保 Google 地球能隨時找到你的位置。 jvzquC41fg|fnxugtu4hqxlng0io1vfru1jpe~rgpvgukxs1gcxuj8feegyt/utecvoppHuncvlptvBcpfxpkm+jn?€i/}|
5.Android编程之实现GPS定位(转)androidsdk设置mp4gps文章浏览阅读827次。本文详细介绍了如何在Android环境下使用SDK开发应用程序,特别是如何获取设备的GPS位置信息,并展示了如何将这些信息显示在自定义视图上。通过创建Activity、使用XML布局以及重写View的onDraw方法,开发者可以实现Android程序的GPS定位功能。jvzquC41o0hmqp3euft/pny1eciuw|1ctzjeuj1fgzbkux196;68@<;
6.AndroidGPS定位步骤Android GPS定位步骤 为确定设备所在位置,需要进行以下步骤的操作。 提供位置服务,需要获得LocationManager对象。使用LOCATION_SERVICE参数调用android.app.Activity.getSystemService()函数获取一个LocationManager实例。 android.app.Activity.getSystemService()函数代码如代码所示。jvzquC41o0nr{s3eqo5fok4Eqn{np86:90nuou
7.基于谷歌地图的Android导航应用设计AET越来越多的互联网应用被移植到智能手机中来,导航软件在智能手机中的应用成为了研究热点之一。在目前大部分智能手机都提供GPS定位服务以及3G 无线网络越来越普及的双重驱动下,在Google 地图中实现导航服务,是具有可行性的。 本文提出并实现了一种基于Google Map Api 的Android导航应用,能够给用户提供人性化和智能化的jvzq<84o0enjpjfgv0ipo8ftvkimg86842<2
8.Android通过GPS获取定位的方式androidgps定位在Android应用中获取GPS定位需要添加ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限,然后创建定位服务类,通过LocationManager获取实例,注册LocationListener来处理位置更新。文章还提到了获取最新位置的方法以及需要注意的设备支持、用户授权和电量问题。此外,建议开发者扩展技能,关注架构设 jvzquC41dnuh0lxfp0tfv8~kjcttu8ftvkimg8igvcomu86537?8597
9.GNSS原始测量数据|Sensorsandlocation|AndroidDevelopers您可以使用 Android Studio 构建一个应用来捕获 GNSS 原始测量数据和其他位置数据,并将其记录到一个文件中。如需查看此类应用的示例源代码,请参阅GPS 测量工具。 GoogleGNSSLogger是一款使用此功能开发的示例应用。要通过该示例应用获取 GNSS 输出,您的设备必须支持 GNSS 原始测量数据。 jvzquC41fg|fnxugt0gof{tkf0ipo8igxgrpr8xgpuusu6fpf/rpejykqp5tgwxqtu5hp|xAjnC{j6hp
10.android手机GPS快速定位方法(转)szw0127彻底解决9108GPS定位慢之末日秒定解决方法论坛里有关这样的帖子不多,跑了很多冤枉路。这不,跑了N天,用尽了坛子里及网上的大部分方法,终于可以秒定了自己的9108GPS了。以前用的是IP3gs,越狱后,用的是高德地图,GPS那个叫快啊,现在入手9108,原来自带的上限导航觉得不jvzquC41yy}/ewgnqiy/exr1kegokmt1ctzjeuju15949A720jznn
11.AndroidGPS定位详解及实例代码AndroidAndroid还不仅仅是这些,视图类型也可以混合使用。Android还带了一个widget库,这个类库包括了滚动条,文本实体,进度条以及其他很多 控件。这些标准的widget可以被重载或被按着我们的习惯定制。现在让我们来进入我们的例子。二、Android GPS定位实例这个演示应用程序将演示了用户的当前的经度和纬度(在文本框中显示)。onjvzquC41yy}/lk:30pku1jwvkerf1B8:694ivv
12.AndroidGPS定位的实现(1)老码农豆豆Android GPS 定位的实现(1) 今天弄了一个多小时,写了一个GPS获取地理位置代码的小例子,包括参考了网上的一些代码,并且对代码进行了一些修改,希望对大家的帮助。具体代码如下: 要实用Adnroid平台的GPS设备,首先需要添加上权限,所以需要添加如下权限: <uses-permission android:name="android.permission.ACCESS_FINE_jvzquC41yy}/ewgnqiy/exr1hn`drsdkp5btlmkxg532:513452886;2:;2:7mvon
13.Android中实现GPS定位的简单例子Android这篇文章主要介绍了Android中实现GPS定位的简单例子,例子逻辑清晰,但相对简单了些,需要的朋友可以参考下 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用! 【如果你想靠AI翻身,你先需要一个靠谱的工具!】 今天弄了一个多小时,写了一个GPS获取地理位置代码的小例子,包括参考了网上的一些代码,并且对代码进行了一jvzquC41yy}/lk:30pku1jwvkerf1>72554ivv
14.移动端性能测试之Android应用性能优化测试篇其实我们一款应用耗电量最大的部分不是UI绘制显示等,常见耗电量最大原因基本都是因为网络数据交互、GPS定位、大量内存性能问题、冗余的后台线程和Service等造成。 Android应用耗电量优化建议: 优化电量使用情况我们不仅可以使用系统提供的一些API去处理,还可以在平时编写代码时就养成好的习惯。具体的一些建议如下: jvzquC41fg|fnxugt0nvc€jk0eun1ltpuwsft8hp1huswv4vqrod1;7:
15.单杰:从专业遥感到大众遥感城市交通拥堵现象严重影响了车辆行驶,而传统导航系统并没有考虑实时交通状况,难以为使用者推荐最佳的行驶路线。印度学者Dhar等提出了一个大众共享交通信息的手机导航系统[13]。该系统旨在利用大量用户上传的GPS定位信息估计各个交通节点的拥堵情况,为使用者推荐最省时的行驶路线。利用该系统,他们比较了谷歌地图推荐的3条行jvzquC41ocoo0|li0ynv0niw0et0kwkq13979862654ivv
16.【AndroidApp】GPS获取定位经纬度和根据经纬度获取详细地址讲解简介:【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细) 需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、获取定位信息 开启定位相关功能只是将定位的前提条件准备好,若想获得手机当前所处的位置信息,还要依靠下列的3种定位工具。 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:8;:;<9
17.Android通过GPS获取定位的流程步骤AndroidlocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);在上述示例中,我们使用 LocationManager.GPS_PROVIDER 作为位置提供者,表示使用GPS定位。0, 0 表示最小时间间隔和最小距离变化都为0,即实时获取位置更新。如果要准确获取地理位置,尽可能保证获取的位置信息不为空,则需要用到jvzquC41yy}/lk:30pku1ywqitgn1;>364
18.Android中GPS定位的简单应用MSTKAndroid中GPS定位的简单应用 在Android中通过GPS获得当前位置,首先要获得一个LocationManager实例,通过该实例的getLastKnownLocation()方法获得第一个的位置,该方法的说明如下: void android.location.LocationManager.requestLocationUpdates(Stringprovider, long mijvzquC41yy}/ewgnqiy/exr1ouzl1y456;75;=3jvor
19.androidGPS定位及空值报错测试及分析qishangui(true);//允许产生开销criteria.setPowerRequirement(Criteria.POWER_LOW);//消耗大的话,获取的频率高criteria.setSpeedRequired(true);//手机位置移动criteria.setAltitudeRequired(false);//海拔//获取最佳provider: 手机或者模拟器上均为gpsString bestProvider = manager.getBestProvider(criteria,true);//使用GPSjvzquC41yy}/ewgnqiy/exr1iwohg8ftejowg8723451:85:14<39>750jznn
20.10.14AndroidGPS初涉·Android基础入门教程·看云在我们使用GPS定位前的第一件事应该是去判断GPS是否已经打开或可用,没打开的话我们需要去 打开GPS才能完成定位!这里不考虑AGPS的情况~ 1)判断GPS是否可用 private booleanisGpsAble(LocationManager lm){returnlm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)?true:false;} jvzquC41yy}/mjsenq{e0ls1mctdnxzf1ctetxnf/v{uq{ncn1>84A:
21.AndroidGPS定位(获取经纬度)android获取经纬度文章浏览阅读7.6w次,点赞24次,收藏114次。本文详细介绍Android平台下GPS定位原理及其实现方法,包括权限配置、关键类与接口介绍、定位流程解析及示例代码。jvzquC41dnuh0lxfp0tfv8z234>229721cxuklqg1fkucrqu17863@>98
22.更改位置信息设置|Sensorsandlocation|AndroidDevelopersPRIORITY_HIGH_ACCURACY- 使用此设置可以请求尽可能精确的位置信息。使用此设置时,位置信息服务更有可能使用 GPS 来确定位置。 PRIORITY_LOW_POWER- 使用此设置可以请求城市级别的定位精确度,即大约 10 公里。这是一个粗略的准确度,消耗的电量可能会比较少。 jvzquC41fg|fnxugt0gof{tkf0mpqpqg0et0fn{gnqv0unsuqty.cwi/nqibvrtp1nudc}nqp1iicwlg/nudc}nqp/yfv}npiu