定位你的android 设备_android 扫描蓝牙设备 定位 - CSDN
  • ...
    boolean flag = false;
     LocationManager locationManager
                    = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            // 通过GPS卫星定位
            boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
            // GPS辅助定位,AGPS,借助网络
            boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
            if (gps || network) {
                flag = true;
            }
    
    


    跳转设置 定位类型页面

    Intent intent = new Intent(
                                    Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                            startActivity(intent);

    GPS:
    定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)
    
    AGPS:
    通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。
    主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位)



    展开全文
  • android提高定位准确度

    千次阅读 2019-02-28 11:44:17
    高德地图app的定位采用1次/秒的定位频率,同样存在初次定位不准确的问题,核心原因是设备定位器准备的AP源数据(伪基站、WiFi不新鲜)不准确。高德地图app尽量采用连续定位的策略,当设备在环境中获得正确的AP数据...

    高德

    1、修正AP源数据:

    高德地图app的定位采用1次/秒的定位频率,同样存在初次定位不准确的问题,核心原因是设备为定位器准备的AP源数据(伪基站、WiFi不新鲜)不准确。高德地图app尽量采用连续定位的策略,当设备在环境中获得正确的AP数据源时,采用的持续定位就会返回相对精准的地理位置覆盖掉之前失准的结果。

    然而集成定位SDK的app并非都是出行行业,也并非都可以像高德地图这样获保持如此高的定位频率。定位SDK团队为用户设计了这样一个单次定位接口:

    mLocationOption.setOnceLocationLatest(true); //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果 //且该结果一定来自与设备环境相符合的AP源

    也可以参考:http://lbs.amap.com/api/android-location-sdk/guide/startlocation/#t4

    2、增加一些判断:

    我们也建议可以通过简单的判断来提高定位的精度。

    合并多次定位结果,选择使用持续定位,例如定位间隔3s。

    a)一次过滤:

    mAMapLocation.getLocationType(); //通过以上方法获取定位类型,如果对定位类型要求比较高,可以过滤掉基站定位(类型6)结果。

    定位类型对照表可参考:

    响应码 说明 介绍
    0 定位失败 请通过AMapLocation.getErrorCode()方法获取错误码,并参考错误码对照表进行问题排查。
    1 GPS定位结果 通过设备GPS定位模块返回的定位结果,精度较高,在10米-100米左右
    2 前次定位结果 网络定位请求低于1秒、或两次定位之间设备位置变化非常小时返回,设备位移通过传感器感知。
    4 缓存定位结果 返回一段时间前设备在同样的位置缓存下来的网络定位结果
    5 Wifi定位结果 属于网络定位,定位精度相对基站定位会更好,定位精度较高,在5米-200米之间。
    6 基站定位结果 纯粹依赖移动、联通、电信等移动网络定位,定位精度在500米-5000米之间。
    8 离线定位结果 -

    b)二次过滤:

    mAMapLocation. getAccuracy(); //通过以上方法获取定位精度,例如超过500M精度的定位结果可以考虑不在业务场景里使用。

    参考:
    为什么高德地图APP的定位效果比我开发的APP效果好?

    android系统api原生定位

            //获取LocationManager
            LocationManager lManager =
                    (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
            /**
             * 参1:选择定位的方式
             * 参2:定位的间隔时间
             * 参3:当位置改变多少时进行重新定位
             * 参4:位置的回调监听
             */
            lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 0, new LocationListener() { //当位置改变的时候调用
                @Override
                public void onLocationChanged(Location location) { //经度
                    double longitude = location.getLongitude(); //纬度
                    double latitude = location.getLatitude(); //海拔
                    double altitude = location.getAltitude();
                } //当GPS状态发生改变的时候调用
    
                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {
                    switch (status) {
                        case LocationProvider.AVAILABLE:
                            Toast.makeText(mContext, "当前GPS为可用状态!", Toast.LENGTH_SHORT).show();
                            break;
                        case LocationProvider.OUT_OF_SERVICE:
                            Toast.makeText(mContext, "当前GPS不在服务内", Toast.LENGTH_SHORT).show();
                            break;
                        case LocationProvider.TEMPORARILY_UNAVAILABLE:
                            Toast.makeText(mContext, "当前GPS为暂停服务状态", Toast.LENGTH_SHORT).show();
                            break;
                    }
                } //GPS开启的时候调用
    
                @Override
                public void onProviderEnabled(String provider) {
                    Toast.makeText(mContext, "GPS开启了", Toast.LENGTH_SHORT).show();
                } //GPS关闭的时候调用
    
                @Override
                public void onProviderDisabled(String provider) {
                    Toast.makeText(mContext, "GPS关闭了", Toast.LENGTH_SHORT).show();
                }
            });
    

    缺点:需要较长的时间才能定位。

    总结

    在室内使用高德定位时,误差不可避免的有50~100米之间,android原生GPS定位误差有几百米。

    展开全文
  • Android Studio GPS三种定位

    千次阅读 2019-06-17 21:17:51
    一.GPS定位android 的三种定位方式 1.GPS定位:需要GPS硬件支持,直接和卫星交互来获取当前经纬度。  优点:速度快、精度高、可在无网络情况下使用。  缺点:首次连接时间长、只能在户外已经开阔地使用,设备上方...

    一.GPS定位:android 的三种定位方式

    1.GPS定位:需要GPS硬件支持,直接和卫星交互来获取当前经纬度。
      优点:速度快、精度高、可在无网络情况下使用。
      缺点:首次连接时间长、只能在户外已经开阔地使用,设备上方有遮挡物就不行了、比较耗电。
    2.Network定位:又细分为WIFI定位和基站定位
    (1)基站定位:一般手机附近的三个基站进行三角定位,由于每个基站的位置是固定的,利用电磁波在这三个基站间中转所需要时间来算出手机所在的坐标
    a.优点:受环境的影响情况较小,不管在室内还是人烟稀少的地方都能用,只要有基站。
    b.缺点:首先需要消耗流量、其实精度没有GPS那么准确,大概在十几米到几十米之间
    (2)WIFI定位:
    a.优点:和基站定位一样,它的优势在于收环境影响较小,只要有Wifi的地方可以使用。
    b.缺点:需要有wifi、精度不准
    3.AGPS定位:AssistedGPS(辅助全球卫星定位系统),是结合GSM或GPRS与传统卫星定位

    二.GPS常用的类

    LocationManager:位置信息管理类。
    Android为定位系统提供了LocationManager管理类。通过LocationManager和其他几个辅助类,开发人员可以方便开发出GPS应用:
    LocationManager lm = getSystemService(Context.LOCATION_SERVICE);

    LocationProvider: 提供定位信息的类。
    LocationManager 提供了方法getAllProviders()获取所有的LocationProvider;
    也可以通过名称获取指定的LocationProvider。
    (1) GPS定位:通过卫星实现的
    LocationProvider lProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);
    (2) 网络定位:通过WI-FI 或者信号塔进行定位
    LocationProvider lProvider = locationManager.getProvider(LocationManager.NETWORK_PROVIDER);

    Location:位置类
    double getLatitude()获取维度值
    double getLongtitude()获取经度值
    double getAltitude(); 获得海拔

    在设备位置发生改变的时候获取到最新的位置信息。
    void requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, new LocationListener{
    void onLocationChanged();

    展开全文
  • Android 百度地图定位

    千次阅读 2018-04-23 13:47:30
    1.打开百度地图开放平台,找到功能与服务,选择定位,点击Android 定位SDK(v7.5),然后这就是官方文档了。 2.然后注册登陆,创建应用,填写之后得到一个AK,以前是AppKey,一个意思。 a. 应...

    最近在做一个两年前被搁置的项目,涉及到定位,但是有些功能已经用不了了,所以更新SDK又集成了一次,非常简单,这里只做入门级讲解,官方文档也很详细的。

    准备工作

    1.打开百度地图开放平台,找到功能与服务,选择定位,点击Android 定位SDK(v7.5),然后这就是官方文档了。
    2.然后注册登陆,创建应用,填写之后得到一个AK,以前是AppKey,一个意思。
    这里写图片描述

    a. 应用名称:开发者请自行定义,建议与应用名称一致,便于管理;
    b. 应用类型:开发者请注意选择为Android SDK,选择其他类型,将导致所生成的AK不可用;(启用服务默认全部启用即可)
    c. 填写SHA1和包名:这两个信息请开发者注意准确填写,它们是AK验证合法性的唯一依据。

    SHA1获取方法:

    1. 打开Android Studio,进入Terminal工具,如下图所示:
      这里写图片描述

    2. 输入命令行和密码,即可获取SHA1等信息。
      命令行:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey (注意目录选择、开发版本、发布版本等问题);
      密码:原始密码一般为android,开发者根据实际情况填写。
      这里写图片描述

    包名大家应该知道怎么弄的吧。。

    配置工作

    1.在文档的下方有一个相关下载 tab,解压之后如下图所示
    这里写图片描述

    2.然后把arm64-v8aarmeabiBaiduLBS_Android.jar 三个文件拷到项目中的libs文件夹下

    这里写图片描述

    3.配置build.gradle文件,设置sourceSets
    这里写图片描述

    4.配置AK

    <meta-data
        android:name="com.baidu.lbsapi.API_KEY"
        android:value="开发者申请的AK" >
    </meta-data>

    这里写图片描述

    5.配置权限和service

    <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!-- 用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!-- 访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- SD卡读取权限,用户写入离线定位数据-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

    ok,到这里就配置完了。

    开始使用

    以service为例

    1.初始化LocationClient类,
    2.并注册监听MyLocationListener,
    3.然后通过LocationClientOption 来配置一些参数选项,
    4.在MyLocationListener 的回调中,可以通过BDLocation 对象获取定位信息

    public class MyLocationService extends Service {
    
        private LocationClient mLocationClient = null;
        private BDLocationListener myListener = new MyLocationListener();
    
        @Override
        public void onCreate() {
            LocationClientOption option = new LocationClientOption();
            option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
            option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
            int span = 1000 * 300;
            option.setScanSpan(span);//设置发起定位请求的间隔
            option.setOpenGps(true);//可选,默认false,设置是否使用gps
    
            //可选,是否需要地址信息,默认为不需要,即参数为false
            //如果开发者需要获得当前点的地址信息,此处必须为true
            option.setIsNeedAddress(true);
    
            mLocationClient = new LocationClient(getApplicationContext());//声明LocationClient类
            mLocationClient.setLocOption(option);
            mLocationClient.registerLocationListener(myListener);//注册监听函数
            mLocationClient.start();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        public class MyLocationListener implements BDLocationListener {
            /**
             * 定位成功之后回调的方法
             */
            @Override
            public void onReceiveLocation(BDLocation location) {
                LogUtil.i("经纬度===", String.valueOf(location.getLongitude()) + "---" + String.valueOf(location.getLatitude()));
                LogUtil.i("省市区==="+location.getProvince()+location.getCity()+location.getDistrict());
            }
        }
    }

    打印
    这里写图片描述

    其它参数:

            double latitude = location.getLatitude();    //获取纬度信息
            double longitude = location.getLongitude();    //获取经度信息
            float radius = location.getRadius();    //获取定位精度,默认值为0.0f
            String addr = location.getAddrStr();    //获取详细地址信息
            String country = location.getCountry();    //获取国家
            String province = location.getProvince();    //获取省份
            String city = location.getCity();    //获取城市
            String district = location.getDistrict();    //获取区县
            String street = location.getStreet();    //获取街道信息

    ok,简单的集成使用就这么简单,官方文档也是比较详细的。

    展开全文
  • 详解在Android中集成高德定位功能

    千次阅读 热门讨论 2017-04-20 14:20:45
    现在很多App基本都少不了定位的功能,Android本身也提供了定位的功能(LocationManager),但是由于Google墙太厚了,所以懂得。。 定位功能国内也有很多选择,主流的当选百度定位、高德等等。今天就和大家分享下...
  • Android网络定位实现

    千次阅读 2014-03-11 00:33:49
    1、引言  目前LBS((Location Based ...但是,他们有一个致命的确定:在室内的环境中,基本是定位不了,而且GPS定位速度是比不上网络定位的。所以,现在的LBS应用中,都是同时打开网络定位和GPS定位的。其中,网络定位
  • Android网络定位或GPS定位

    千次阅读 2017-01-17 18:34:09
    简单的位置定位设备位置定位的方式有两种:GPS定位和网络定位。1.GPS准确度高但耗电多,2.网络定位耗电少但准确度低。
  • Android定位策略

    千次阅读 2016-06-17 18:15:48
    android开发地理位置相关的应用程序,可以利用GPS或者android的网络定位数据源来获取用户的地理位置。尽管GPS的定位更加精准,但它只适用于户外,并且还会更快的消耗电量,它也不能按用户所期待的及时返回地理...
  • android开发之GPS定位详解

    万次阅读 多人点赞 2013-09-26 14:04:26
    要想操作定位相关设备,必须先定义个LocationManager。我们可以通过如下代码创建LocationManger对象。 LocationManger locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE
  • Android系统GPS定位实现

    千次阅读 2019-05-16 15:50:16
    基站定位:根据基站(信号塔)的个数以及手机与基站的距离来实现定位,准确性取决于基站的个数3.GPS定位:通过光波的形式和Gps定位卫星通讯,返回经纬度坐标,连接时间比较长,在空旷的地方定位比较流畅,不需要联网...
  • Android开发实现高德地图定位详解

    千次阅读 2016-07-01 15:17:42
    2. 在开发中下载Android平台下的地图SDK和定位SDK文件 进入相关下载下载自己想要的功能或文件,图只是截取了地图SDK的页面,定位SDK也是一样,按自己想要的文件下载。下载完成后解压得到: - 3D地图包...
  • 由于第一次接触到这种商业的项目,很多界面的功能是实现了,比如长按弹出按钮,虚线划分界面等等,但最让我头疼的算是一个ListView里的许多view的定位问题,利用界面实时工具,再加上RelativeLayout,的确是可以定位...
  • android 定位功能的实现

    千次阅读 2018-08-22 15:47:25
    Android开发其中。常常须要用到定位功能,尤其是依赖于地理位置功能的应用。非常多人喜欢使用百度地图,高德地图提供的sdk。开放API,可是在只须要经纬度,或者城市,街道地址等信息。并不须要提供预览地图,地图...
  • android的四种定位方式

    千次阅读 2016-05-11 14:26:17
    Android 定位一般有四种方法,这四种方式分别是:GPS定位,WIFI定准,基站定位,AGPS定位,(1)Android GPS:需要GPS硬件支持,直接和卫星交互来获取当前经纬度,这种方式需要手机支持GPS模块(现在大部分的智能机...
  • android 的三种定位方式

    万次阅读 多人点赞 2016-01-22 17:16:20
    Android 定位大致分为三大类:GPS定位;Network定位;AGPS定位。而Network又细分为WIFI定位和基站定位。下面详细讲解每种定位:  Android GPS:需要GPS硬件支持,直接和卫星交互来获取当前经纬度。  优点:速度...
  • 定位可以使用GPS、基站、Wi-Fi来完成定位,百度地图Android定位SDK是利用设备当前的GPS信息(GPS定位),基站信息(基站定位)和Wi-Fi信息(Wi-Fi定位)完成定位的。开发者在应用中成功集成百度定位SDK以后,既可以...
  • Android开发中之手机定位(记录)

    千次阅读 2018-08-13 16:54:22
    本篇博客主要记录一下如何进行手机定位到某一个城市之类的功能。当前,这里用到了百度...1、运用Android自带的定位功能,来获取到当前设备处于的经度和纬度值。 2、通过百度地图的解析API,来获取到包含地址信息...
  • Android GPS定位(获取经纬度)

    万次阅读 多人点赞 2016-09-13 16:52:01
     android 定位一般有四种方法,这四种方式分别是:GPS定位,WIFI定位,基站定位,AGPS定位。 本篇博文主要记录一下GPS定位:这种方式需要手机支持GPS模块硬件支持。通过GPS方式准确度是最高的,但是它的缺点也非常...
  • Android WebView 中的 Html 网页定位操作

    千次阅读 2017-09-08 00:08:12
    利用 HTML5 提供的定位 API 可以帮助网页获取用户设备的当前...但如果是在 Android 系统下的应用中打开网页,我们使用 Hybrid 开发模式时用到的 WebView 包括应用本身都需要做一定的设置才能支持内嵌网页的定位功能。
  • Android设备变了IBeacon基站,即使用Android设备发送IBeacon广播信息。 要求: 1、硬件 支持BLE Peripheral模式的手机,新款Android手机大部分支持(三星note5, 三星Galaxy Tab S2, Nexus6 ...)</li> 2...
1 2 3 4 5 ... 20
收藏数 49,400
精华内容 19,760
关键字:

定位你的android 设备