Android开发之高德地图实现定位

作者: YungFan | 来源:发表于2016-04-05 13:04 被阅读27656次
    在应用开发中,地图开发是经常需要使用的“组件”,Google Map虽然有官方教程,无奈用不起来,原因你懂的~~那么国内比较出名的是就是百度地图和高德地图,由于个人喜好,所以选择了高德地图LBS,废话不说,上干货。

    1、注册开发者,创建应用

    这个几乎是所有开放平台都通用的做法,无外乎注册帐号,成为开发者,然后创建一个Android应用,会为你分配一个key绑定你的服务。


    注册key.PNG
    2、下载SDK,导入jar包,add to library
    jar包.PNG
    • 第一个是2D地图的jar包,因为最后定位以后我要在地图上标出来位置
    • 第二个是用于定位的jar包
    • 注意:如果使用的是3D地图,那么地图SDK和导航SDK需要引入so库文件,先在app/src/main/目录下新建一个jniLibs目录,将so放到此目录下
    3、配置AndroidMainfest.xml文件
    <!-- 申请必要的权限-->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    
    <application
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme"
    
            >
            <!--设置key-->
            <meta-data
                android:name="com.amap.api.v2.apikey"
                android:value="这里填写第一步你申请的那个key" />
            <!--声明定位service-->
            <service android:name="com.amap.api.location.APSService"></service>
    </application>
    
    4、Activity的布局文件
    <com.amap.api.maps2d.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    

    很简单,就一个2D的地图

    5、Activity,注释非常详细
    //监听定位和定位变化
    public class MainActivity extends AppCompatActivity implements  LocationSource, AMapLocationListener {
    
        //显示地图需要的变量
        private MapView mapView;//地图控件
        private AMap aMap;//地图对象
    
    
        //定位需要的声明
        private AMapLocationClient mLocationClient = null;//定位发起端
        private AMapLocationClientOption mLocationOption = null;//定位参数
        private OnLocationChangedListener mListener = null;//定位监听器
    
        //标识,用于判断是否只显示一次定位信息和用户重新定位
        private boolean isFirstLoc = true;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //显示地图
            mapView = (MapView) findViewById(R.id.map);
            //必须要写
            mapView.onCreate(savedInstanceState);
            //获取地图对象
            aMap = mapView.getMap();
    
    
            //设置显示定位按钮 并且可以点击
            UiSettings settings = aMap.getUiSettings();
            //设置定位监听
            aMap.setLocationSource(this);
            // 是否显示定位按钮
            settings.setMyLocationButtonEnabled(true);
            // 是否可触发定位并显示定位层
            aMap.setMyLocationEnabled(true);
    
    
            //定位的小图标 默认是蓝点 这里自定义一团火,其实就是一张图片
            MyLocationStyle myLocationStyle = new MyLocationStyle();
            myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.firetwo));
            myLocationStyle.radiusFillColor(android.R.color.transparent);
            myLocationStyle.strokeColor(android.R.color.transparent);
            aMap.setMyLocationStyle(myLocationStyle);
    
            //开始定位
            initLoc();
    
    
        }
    
    
        //定位
        private void initLoc() {
            //初始化定位
            mLocationClient = new AMapLocationClient(getApplicationContext());
            //设置定位回调监听
            mLocationClient.setLocationListener(this);
            //初始化定位参数
            mLocationOption = new AMapLocationClientOption();
            //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置是否返回地址信息(默认返回地址信息)
            mLocationOption.setNeedAddress(true);
            //设置是否只定位一次,默认为false
            mLocationOption.setOnceLocation(false);
            //设置是否强制刷新WIFI,默认为强制刷新
            mLocationOption.setWifiActiveScan(true);
            //设置是否允许模拟位置,默认为false,不允许模拟位置
            mLocationOption.setMockEnable(false);
            //设置定位间隔,单位毫秒,默认为2000ms
            mLocationOption.setInterval(2000);
            //给定位客户端对象设置定位参数
            mLocationClient.setLocationOption(mLocationOption);
            //启动定位
            mLocationClient.startLocation();
        }
    
    
        //定位回调函数
        @Override
        public void onLocationChanged(AMapLocation amapLocation) {
    
            if (amapLocation != null) {
                if (amapLocation.getErrorCode() == 0) {
                    //定位成功回调信息,设置相关消息
                    amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表
                    amapLocation.getLatitude();//获取纬度
                    amapLocation.getLongitude();//获取经度
                    amapLocation.getAccuracy();//获取精度信息
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date date = new Date(amapLocation.getTime());
                    df.format(date);//定位时间
                    amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
                    amapLocation.getCountry();//国家信息
                    amapLocation.getProvince();//省信息
                    amapLocation.getCity();//城市信息
                    amapLocation.getDistrict();//城区信息
                    amapLocation.getStreet();//街道信息
                    amapLocation.getStreetNum();//街道门牌号信息
                    amapLocation.getCityCode();//城市编码
                    amapLocation.getAdCode();//地区编码
    
                    // 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置
                    if (isFirstLoc) {
                        //设置缩放级别
                        aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
                        //将地图移动到定位点
                        aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())));
                        //点击定位按钮 能够将地图的中心移动到定位点
                        mListener.onLocationChanged(amapLocation);
                        //添加图钉
                        aMap.addMarker(getMarkerOptions(amapLocation));
                        //获取定位信息
                        StringBuffer buffer = new StringBuffer();
                        buffer.append(amapLocation.getCountry() + "" + amapLocation.getProvince() + "" + amapLocation.getCity() + "" + amapLocation.getProvince() + "" + amapLocation.getDistrict() + "" + amapLocation.getStreet() + "" + amapLocation.getStreetNum());
                        Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();
                        isFirstLoc = false;
                    }
    
    
                } else {
                    //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
                    Log.e("AmapError", "location Error, ErrCode:"
                            + amapLocation.getErrorCode() + ", errInfo:"
                            + amapLocation.getErrorInfo());
    
                    Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();
                }
            }
        }
    
        //自定义一个图钉,并且设置图标,当我们点击图钉时,显示设置的信息
        private MarkerOptions getMarkerOptions(AMapLocation amapLocation) {
             //设置图钉选项
            MarkerOptions options = new MarkerOptions();
            //图标
            options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.fire));
            //位置
            options.position(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude()));
            StringBuffer buffer = new StringBuffer();
            buffer.append(amapLocation.getCountry() + "" + amapLocation.getProvince() + "" + amapLocation.getCity() +  "" + amapLocation.getDistrict() + "" + amapLocation.getStreet() + "" + amapLocation.getStreetNum());
            //标题
            options.title(buffer.toString());
            //子标题
            options.snippet("这里好火");
            //设置多少帧刷新一次图片资源
            options.period(60);
    
            return options;
    
        }
        //激活定位
        @Override
        public void activate(OnLocationChangedListener listener) {
            mListener = listener;
    
        }
    
        //停止定位
        @Override
        public void deactivate() {
            mListener = null;
        }
    
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onResume() {
            super.onResume();
            mapView.onResume();
        }
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onPause() {
            super.onPause();
            mapView.onPause();
        }
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mapView.onSaveInstanceState(outState);
        }
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mapView.onDestroy();
        }
    }
    
    
    6、运行程序,点击自定义的 “火” 图钉,效果图如下:
    Location Result.png
    7、长按地图截图并保存图片

    Activity实现AMap.OnMapLongClickListener和AMap.OnMapLongClickListener接口,
    然后Activity的声明变为:

    public class MainActivity extends AppCompatActivity implements AMap.OnMapLongClickListener, AMap.OnMapScreenShotListener, LocationSource, AMapLocationListener 
    

    分别实现下列两个的方法

        /**
         * 长按地图进行截屏
         *
         * @param latLng
         */
        @Override
        public void onMapLongClick(LatLng latLng) {
    
            // 设置截屏监听接口,截取地图可视区域
            // 需要传入一个 AMap.OnMapLongClickListener 接口的实现者
            aMap.getMapScreenShot(this);
        }
    
      /**
         * 截屏回调方法 保存截图
         */
    
        @Override
        public void onMapScreenShot(Bitmap bitmap) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            try {
                // 保存在SD卡根目录下,图片为png格式。
                FileOutputStream fos = new FileOutputStream(
                        Environment.getExternalStorageDirectory() + "/test_"
                                + sdf.format(new Date()) + ".png");
                boolean b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
                try {
                    fos.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (b)
    
                    Toast.makeText(MainActivity.this, "截屏成功", Toast.LENGTH_LONG).show();
                else {
                    Toast.makeText(MainActivity.this, "截屏失败", Toast.LENGTH_LONG).show();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    

    2016.8.26 补充
    有很多简友按照如上过程走下来,发现实现不了我的效果,因此我总结了可能的原因:

    1、AndroidMainfest.xml 里一定要将自己申请的key放进去;
    2、申请key时有个SHA-1的,千万不能错,错了也不能定位,因为一旦错了,就无法识别是你当前的应用了;
    3、如果你使用的是3D的图,务必要将3D的库导进项目,我的案例是2D的;
    4、一定要在真机测试。

    有无法定位的简友,请按照上述错误原因来排查,如果还有问题,可以留言~~~

    相关文章

      网友评论

      • Paranoid丶丶:老哥,已经解决了,是因为我用模拟器的原因,用手机测试就没问题了,感谢。
        Paranoid丶丶:@YungFan 嗯嗯 ,完美
        YungFan:@Paranoid丶丶 我在文末说明了几种常见的原因
      • Paranoid丶丶:大佬,根据你的方法,可以实现地图定位等功能,但是为什么无法返回这个定位地址的信息?也就是图钉那里,为什么只有“这里好火”而没有上面的地址信息?
      • b4edba7f37e0:请问大佬 2D地图的那个定位按钮 默认实在地图的右上角 有什么办法给他放在右下角? 或者怎么设置他的位置
        b4edba7f37e0:@YungFan 嗯没有提供现成的方法的话就只能这么做了, 感谢
        YungFan:@undefined理想 自己做一个按钮 隐藏掉自带的 逻辑就是再定位一次
      • 三千笔墨绘你一世qing城:哪里需要用到SHA-1,不是只要用到申请的key吗?
        YungFan:@三千笔墨绘你一世qing城 申请Key时,否则定位肯定失败
      • 三千笔墨绘你一世qing城:一直定位失败是怎么回事吖
      • d947d92e5a1b:我用华为7.0手机,如果不开gps定位服务就定位失败,显示错误码12,但是我已经申请过权限了,打开gps定位就ok,目前只在华为上出现这种情况,oppo,锤子都没有问题,亲测
        YungFan:@zjwAndroid 那你去高德官网看看12到底是什么错误,然后对症下药
      • b73993389763:麻烦问一下右上角那个图标怎么去掉,api看了好久也没找到
        YungFan:@情非得已_tb 直接不显示 自定义一个按钮放上去即可
      • f54cfccc54d5:请问楼主,我如何才能做到显示其他朋友的定位,就像微信的位置共享功能一样
        f54cfccc54d5:@YungFan 是只有在定位SDK中的定位才可以设置成仅GPS模式吗?我想用地图SDK中的功能是不是不能实现呢?而且定位SDK在官方介绍中不知道怎么设置小蓝点啊,很迷茫,求帮助。
        YungFan:@Zbeeee 对方把经纬度传给你 就可以显示了
      • a2d699a00a89:很好!照着您的代码,虽然遇到点坑,但也算实现了基本的功能了
        YungFan:@a2d699a00a89 :+1::+1::+1::clap::clap::clap:
      • 崔汉宇:时隔一年的回复,双击666
        YungFan:@崔汉宇 :grin::grin::grin:
      • Android14k纯金大佬:大神,关于高德地图移动,中心点不动这个需求您知道怎么弄吗?我在网上找了好多都没找到。找到一篇是拖动地图的,但是用到一个api但是现在官网取消了那个api,现在不知道怎么弄
        YungFan:@Android14k纯金大佬 中心点不动是因为你只定位了一次 如果想要跟着位置动 需要不停调用定位函数
      • f869e80f7bc2:如果我想直接将北京这个地点换成一个固定的位置,该怎么设置呢?
        f869e80f7bc2:@YungFan 好的,谢谢
        YungFan:@锦周 直接设置经纬度即可
      • 399ffe7e842f:楼主,你好,我是39楼的小白,刚试验了一下,手动打开定位权限,就能够定位成功了,
        自己也还需要添加动态申请权限:smile:谢谢楼主的demo
      • 399ffe7e842f:楼主你好,我的是7.1的设备,定位失败,说是没有权限,要添加申请权限吗?
        09-06 20:56:32.202 32730-32730/gaode.com.map E/AmapError: location Error, ErrCode:12, errInfo:缺少定位权限 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:定位权限被禁用,请授予应用定位权限#1201

      • BulletYuan:楼主大大,我遇到了问题,请教一下哦~
        我只调用定位模块的功能,没有使用地图,然后错误日志就是
        Failed to open database '/storage/emulated/0/amap/openamaplocationsdk/alsn.db'.
        这个是什么意思啊 是因为本地没有装高德APP的原因吗?
        YungFan:@BulletYuan 应该是你的sdk没有导对
      • 69119306dedf:感谢老师:+1: 感谢分享:+1:
        老街旧巷_50d4:黑屏,显示不出地图
        YungFan:@69119306dedf 不客气 :stuck_out_tongue_closed_eyes::stuck_out_tongue_closed_eyes:
      • linghugoogle:官网上的教程不全,其他博客上的教程也运行不了,感谢博主
        YungFan:@宾子 能有帮助就好
      • 76423d6c6eaf: 楼主, 麻烦在问一个情况, 使用你的写法 第一次进入 程序 能够显示, 但是在不关闭程序的情况下, 第二次 在进入, 便 不显示自己的定位 是怎么一回事呢, 第二次进入 只显示一个默认地图!
        76423d6c6eaf:@YungFan 楼主大大, 还麻烦 多问一个问题, 如果我要自定义定位控件的话, 怎么让自定义的定位控件 点击时搭到定位的目的呢 麻烦你了 :pray:
        76423d6c6eaf:@YungFan 啊 - -。 那如果要多次的话 怎么办呢 :cry:
        YungFan:@务实 我故意只定位了一次
      • Android小倒爷:请问怎么改缩放级别啊。我改了aMap.moveCamera(CameraUpdateFactory.zoomTo(**))里面的数字,但是他的缩放级别就是没有改变,如果去掉UiSettings settings = aMap.getUiSettings();
        //设置定位监听
        aMap.setLocationSource(this);
        // 是否显示定位按钮
        settings.setMyLocationButtonEnabled(true);
        // 是否可触发定位并显示定位层
        aMap.setMyLocationEnabled(true);
        这几行就会按照我写的缩放级别但是没有定位到的图标
        YungFan:@Android小倒爷 aMap.moveCamera(CameraUpdateFactory.zoomTo(17)); 修改里面的数字即可 我的代码注释有
      • ibrucekong:模拟器(Genymotion)定位显示wifi信号不足,请问这是怎么回事?
        YungFan:@ibrucekong 我一直用真机的
        ibrucekong:@YungFan 谢谢,用真机可以!但是为啥模拟器不可以呢?之前用过百度地图,在模拟器上正常运行,高德怎么连定位都不支持呢
        YungFan:@ibrucekong 不要用模拟器
      • 76423d6c6eaf:为什么我跟你一样的代码进去的话, 会出现两个图标呢, 原先的有边框的图标显示, 自己添加的图标 也显示, 而且点击 没有反应
        76423d6c6eaf:@YungFan 楼主, 能不能问一下 我在手动地图上 添加 marker的时候, 有没有什么方法可以把它隐藏, 用 amap.clear(); 会把全部的图标都刷了, 而remove(); 我若是用了 addMarke 就对 这个方法没效果了。 我要实现的方式 是在地图上 有两个按钮A B,点击A 显示所有的 marker坐标, 点击B 则隐藏除了自身坐标 和 默认marker坐标。其余不显示, 求教一下 麻烦了 :flushed:
        76423d6c6eaf:@YungFan 其他都一样, 图片我用了自己的。 这跟我activity 继承 fragment 有影响嘛
        YungFan:@务实 不会的 按照代码写 肯定会覆盖默认的 你检查一下
      • MarcoF:你好,请问怎么才可以自己传入经纬度来指定那个位置呢,不用手机自己定位,
        YungFan:@af09180057e7 反地理编码即可
      • o_o猫先森:请教下:定位按钮怎么设置到左下角(demo中在右上角)。并且如何自定义该按钮的样式?
        YungFan:@微扬的嘴角 你直接放一个按钮上去就可以啊 随便你放在哪都可以 样式就更简单了 让美工做一个图就可以了 然后在程序中设置点击事件就可以了啊
      • _LINXIONG:当经纬度坐标变化时,这个自定义的图钉会不会跟着移动呢。若想坐标变化时,图钉也跟着移动该怎么办?
        _LINXIONG:@YungFan 可以告诉具体在哪个类里面吗?找了一下没找到……
        YungFan:@一个人的朝圣_llx 我这个案例不会 但是高德的API有这个
      • 8860fa77359d:打包成apk之后其他定位不了
        8860fa77359d:多谢了 确实 开发工具用的是AndroidStudio 应该是用jks中生成的sha1 。我用的是keystore生成的sha1 ,keystore是Eclipse用的 。非常感谢
        YungFan:@斯仪 应该是你的SHA-1不对 你测试的时候用的不是你自己的key 导出的时候用的是你自己的key
        8860fa77359d:有可能是什么原因,真机能出效果 就是安装打包后的apk定位不了
      • ZRay111:楼主写的真的太棒了,很有用 :+1: 。不过,我借用了楼主的代码后,为什么长按地图没有反应呢?有些疑惑
        YungFan:@用户5294514895 :grin:
        ZRay111: @YungFan 谢谢楼主,解决了😁😁😁
        YungFan:@用户5294514895 监听器设置了没
      • 73ace7d7a44b:您好,我在真机上面运行后,定位是成功的,只是自定义的图钉点了没反应,也没有地址信息显示,请问,这是什么原因呢?
      • Roy_Mo:恩 我都有检查过。。可是就是在真机上提示定位失败,真机的GPS是开启的
        恩。。要不我把我的代码发给您,请您帮忙看看可以吗
        因为是才接触这边的本科生,所以可能有些地方不是很清楚,请多指教,谢谢您
        YungFan:@MoCuishle00 这个key是根据你的项目的SHA-1生成的,你看看你的SHA-1是不是错了,如果这个错了,你的key就错了
        Roy_Mo:@YungFan 他提示错误7也就是key鉴权错误 但我检查了多次控制台的key和代码里填key的地方 是一致的啊…
        YungFan:@MoCuishle00 你先看一下输出什么错误啊
      • Roy_Mo:楼主您好,我按照你的代码进行了测试。。。使用的是真机进行的测试,运行起来之后可以显示地图,也有定位按钮,只是提示定位失败,请问怎么解决?
        我在测试您的代码时,没有做别的什么更改,key值确定是我自己的,只是您自定义的图钉“火”那几行被我注释掉了,请问会影响吗
        YungFan:@MoCuishle00 那个没有影响 你调试一下看后台输出什么错误信息 我列出的问题你都核对了吗?
      • Lrxc:自带的定位按钮默认在左上角,可以移动位置吗?
        YungFan:@萧萧冷者 这个没统计过 以前我用百度 现在用高德 其实我感觉差不多吧
        Lrxc:@YungFan 只要是想用官方提供的那个。。。就目前而言,安卓开发是高德地图多还是百度呢?
        YungFan:@萧萧冷者 你自己弄一个按钮 想放哪都可以
      • Mr_Tu:楼主,请问调了aMap.clear()清除后,在不点地图自带圆点重新定位下,点我自己的button调什么方法可以重新定位。我照着你写的这篇文字,调 initLoc()好像不行。请教怎么弄???
        YungFan:@luoqize1 可以一直调用定位方法啊
        896f273371cc:@YungFan 请问要怎么样能做多次定位
        YungFan:@4c8c3f9bd0ad 可以的 因为我只做了一次定位 我设置了一个标识位 定位成功之后就设置为false了
      • a9ada6456121:真的真的非常感谢,查了无数篇教程资料只有这里可以成功,太感谢了。另外我在开发过程中导armeabi文件的时候发现一个坑,按照官方教程as开发armeabi要放在app/src/main/jniLibs文件夹下面,但是我的一直报错com.autonavi.amap.MapCore.MapProjection.getMapZoomer()' on a null object ,折腾了一整天都没解决,一度想放弃高德地图转百度地图,后来查了资料看到有位网友指出armeabi要放在app/libs文件夹下,我抱着试一试的态度试了一下竟然成功了。在此指出希望能帮到其他网友
        YungFan:@不归鹿 只要能找到就可以
        a9ada6456121:纠正一下,如果armeabi放在app/src/main/jniLibs文件夹下面能正常运行就无视上面的内容,如果有报错再尝试放在app/libs文件夹下
        YungFan:@不归鹿 能帮到你就好 谢谢你的补充
      • cbaeab7853fc:这个在android6.0 系统上 定位失败 麻烦问一下怎么解决呢
        YungFan:@cbaeab7853fc 仔细查看该软件是否已经被授权
      • 5a9b9e2707f0:感谢作者大大,连续好几天我像困在迷宫里的小孩,直到遇到作者大大的这篇文章,就像在漆黑的夜晚航行遇到了灯塔。。
        希望作者大大有时间能够多发表您的文章 :+1:
        YungFan:@HankinsPan :sweat:
      • 旧日梦圆:感谢作者大大,连续好几天我像困在迷宫里的小孩,直到遇到作者大大的这篇文章,就像在漆黑的夜晚航行遇到了灯塔。。
        希望作者大大有时间能够多发表您的文章 :+1:
        caa146e8d72b:用了你代码 为什么我一开初始化就有Marker图标 然后我在onLocationChanged 回调函数里面自定义Marker 就重叠了 第一个一直删除不了
        YungFan:@旧日梦圆 评价太高了 能帮到你就好
      • 不会飞的扫把:请问高德地图怎么实现地址搜索功能?
        YungFan:@hey_good 6.0后需要动态申请
        YungFan:@莫兰继 我自己没做过这样的需求。地图搜应该是根据地址反地理编码 然后将经纬度在地图上显示出来。
      • 7c97687f6ed0:楼主,我是在能显示高德地图的基础上加上你的定位功能,但运行后后台显示初始化定位有问题
        YungFan:@磨砂瓶 那你用的版本是不是和我不一样?没有该方法?
        7c97687f6ed0:@YungFan aMap.setMyLocationEnabled(true)报错,
        YungFan:@磨砂瓶 那你看看我总结的那些原因 你有没有犯?
      • 2e246ae1e70b:你好,我是 Android新手,就是我将你的代码在Android studio上写后再使用真机调试但是结果却是只显示基本地图和那个点击的按钮,无法实现定位功能,请问一下你有什么办法吗?
        YungFan:@2e246ae1e70b 你调试一下 看看控制台输出什么 你直接装真机 只是不崩 但看不到后台输出
        2e246ae1e70b:@YungFan 没有报错,但是真机调试时只是显示基本地图,没有实现定位】
        YungFan:@2e246ae1e70b 报错了没有?
      • 7d561f4b3d18:用您的最后定位失败,没有签名,应该这不影响的吧?
        YungFan:@冷秋橙月 2D和3D的库不一样
        7d561f4b3d18:已解决,是sha1的问题,不过修改成3d版地图之后不会显示图钉标签了……
        YungFan:@冷秋橙月 不影响
      • 努力努力再努力_姜姜:楼主 我用模拟器出现WiFi信息不足 然后将安装包装在手机上还是不行
        徐榕连:我的app也遇到这个问题呀,想问问你最后是怎样解决的呀?我的定位会出现以下两种问题 : 1.在GPS与定位权限都已开启的情况下,仅仅使用数据流量登录app,隔几分钟后会弹出提示“缺少定位权限,请到http://lbs.amap.com/api/android-location-sdk/abouterrorcode/查看错误码说明”. 问题2.在在GPS与定位权限都已开启的情况下,同时开启数据流量和wifi(没连上),定位时就会出现错误提示:WIFI信息不足 请到http://lbs.amap.com/api/android-location-sdk/abouterrorcode/查看错误码说明. ,这个bug已经找了几天了,都找不出原因,我是是真机调试的呀
        YungFan:@努力努力再努力_姜姜 真机调试 看有没有错
      • Ucoon:怎么让他可以实现绘制轨迹的功能呢
        YungFan:@Ucoon 这个你得参考高德地图的官方教程,里面有绘制覆盖层的知识
      • _caoDan的世界:我用你的代码了。报AmapError: location Error, ErrCode:10, errInfo:定位服务启动失败
        解决方案:清理中加
        <service android:name="com.amap.api.location.APSService"></service>
        _caoDan的世界: @YungFan 我用3D的。报错了。加上我说的那句就可以了。有错就加。没错就OK
        YungFan:@_孙佳沃 我的代码里有这句话啊 你是有这句话保错?
        YungFan:@_孙佳沃 你是直接报错吗?我之前用是不报错的啊
      • 魏魏魏魏:我知道myLocationStyle.myLocationIcon(bitmap)这个方法,我指的蓝色的圆形精度范围,这个是不是需要poi的API才能实现呢?
        魏魏魏魏:@YungFan 请问官网实现的这个效果怎么和我的效果不一样呢?难道是以前的官方图标和现在的官方图标不一样了?
        魏魏魏魏:难怪半天都调不出来,谢谢
        YungFan:@魏魏魏魏 一旦自定义图钉了 就没有那个蓝色的圆形范围了
      • 魏魏魏魏:请问楼主,为什么显示不了更改的地图图标呢?安装官方的配置也不行!!!http://lbs.amap.com/api/android-sdk/guide/location/#t4
        YungFan:@魏魏魏魏 自定义图钉
        魏魏魏魏:@魏魏魏魏 我指的是那个蓝色圆形区域
      • jjkopen:高德是不是有封装6.0权限请求啊?
        YungFan:@jjkopen 报啥错 报错了就好解决
        jjkopen:@YungFan 我现在的demo没写权限请求他也蹦出来,然后权限请求后的流程不对,然后APP直接卡死了。 :sob:
        YungFan:@jjkopen 不清楚啊 我也看不到源代码:sweat:
      • 099647cc5dbd:想问一下,genymotion模拟器,错误wifi不足怎么解决,百度可以使用,但百度首页的定位不能使用。
        YungFan:@蒲公英博 我都是在真机运行的,没有问题
        099647cc5dbd: @YungFan 模拟器连的无线
        YungFan:@蒲公英博 错误wifi不足?
      • 上官哥哥:楼主是大学教师?
        YungFan:@上官哥哥 开得学校比较多了
        上官哥哥:@YungFan 啊..现在有大学直接教安卓?好羡慕
        YungFan:@上官哥哥 是滴
      • evanwo:mark,博主现在还是学生?
        YungFan:@雪花鱼 不是的 教学生的 😊😊

      本文标题:Android开发之高德地图实现定位

      本文链接:https://www.haomeiwen.com/subject/cfeelttx.html