高德定位

import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.CompoundButton;import android.widget.Toast;

import com.amap.api.location.AMapLocation;import com.amap.api.location.AMapLocationClient;import com.amap.api.location.AMapLocationClientOption;import com.amap.api.location.AMapLocationListener;import com.amap.api.maps.AMap;import com.amap.api.maps.LocationSource;import com.amap.api.maps.MapView;

import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Locale;

public class MainActivity extends AppCompatActivity implements LocationSource,AMapLocationListener,        CompoundButton.OnCheckedChangeListener {

    private MapView mMapView;    private AMap aMap;    private AMapLocationClient mlocationClient;    private AMapLocationClientOption mLocationOption;    private OnLocationChangedListener mListener;

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);

        mMapView = (MapView) findViewById(R.id.map);        mMapView.onCreate(savedInstanceState);

        //设置监听        aMap = mMapView.getMap();        aMap.setLocationSource(this);        aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认按钮是否显示        aMap.setMyLocationEnabled(true);        aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);//设置定位的模式为定位模式

    }

    @Override    public void onLocationChanged(AMapLocation aMapLocation) {        Log.i("TAG","onLocationChanged"+1);

        if (mListener != null && aMapLocation != null) {            if (aMapLocation != null                    && aMapLocation.getErrorCode() == 0) {                Log.i("TAG", "定位成功");                // Toast.makeText(MainActivity.this, "定位成功", Toast.LENGTH_LONG).show();                mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点            } else {                String errText = "定位失败," + aMapLocation.getErrorCode() + ": " + aMapLocation.getErrorInfo();

                Toast.makeText(MainActivity.this, errText, Toast.LENGTH_LONG).show();                //Log.e("AmapErr", errText);            }        }

    }

    @Override    public void activate(OnLocationChangedListener onLocationChangedListener) {        Log.i("TAG","activate"+2);        mListener = onLocationChangedListener;        if (mlocationClient == null) {            mlocationClient = new AMapLocationClient(this);            mLocationOption = new AMapLocationClientOption();            //设置定位监听            mlocationClient.setLocationListener(this);            //设置为高精度定位模式            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);            //设置定位参数            mlocationClient.setLocationOption(mLocationOption);            // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,            // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求            // 在定位结束后,在合适的生命周期调用onDestroy()方法            // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除            mlocationClient.startLocation();        }    }

    @Override    public void deactivate() {        Log.i("TAG","deactivate"+3);        mListener = null;        if (mlocationClient != null) {            mlocationClient.stopLocation();            mlocationClient.onDestroy();        }        mlocationClient = null;

    }

    @Override    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

       Log.i("TAG","onCheckedChanged"+4);        aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);    }

    public String sHA1(Context context) {        Log.i("TAG","sHA1"+5);        try {            PackageInfo info = context.getPackageManager().getPackageInfo(                    context.getPackageName(), PackageManager.GET_SIGNATURES);            byte[] cert = info.signatures[0].toByteArray();            MessageDigest md = MessageDigest.getInstance("SHA1");            byte[] publicKey = md.digest(cert);            StringBuffer hexString = new StringBuffer();            for (int i = 0; i < publicKey.length; i++) {                String appendString = Integer.toHexString(0xFF & publicKey[i])                        .toUpperCase(Locale.US);                if (appendString.length() == 1)                    hexString.append("0");                hexString.append(appendString);                hexString.append(":");            }            return hexString.toString();        } catch (PackageManager.NameNotFoundException e) {            e.printStackTrace();        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        }        return null;    }

    @Override    protected void onPause() {        super.onPause();

        Log.i("TAG","onPause"+6);        mMapView.onPause();        deactivate();    }

    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        Log.i("TAG","onSaveInstanceState"+7);        mMapView.onSaveInstanceState(outState);    }    @Override    protected void onResume() {        super.onResume();        Log.i("TAG","onResume"+8);        mMapView.onResume();    }

    @Override    protected void onDestroy() {        super.onDestroy();        Log.i("TAG","onDestroy"+9);        mMapView.onDestroy();        mMapView.onDestroy();        if (null != mlocationClient) {            mlocationClient.onDestroy();        }    }

}//mainfest文件  还需要导入地图的3djar 和定位的Jar  key需要自己申请 应用的包名和项目的包名需一致
<?xml version="1.0" encoding="utf-8"?><manifest package="itcast.cn.mymap"          xmlns:android="http://schemas.android.com/apk/res/android">

    <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.CHANGE_WIFI_STATE" />

    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">

        <meta-data            android:name="com.amap.api.v2.apikey"            android:value="3e38e8decba8f7e2f3909e76ac82362e"            ></meta-data>

        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>            </intent-filter>        </activity>

        <service android:name="com.amap.api.location.APSService"></service>    </application>//xml配置文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"  >

    <com.amap.api.maps.MapView        android:id="@+id/map"        android:layout_width="match_parent"        android:layout_height="match_parent">    </com.amap.api.maps.MapView>

</RelativeLayout>
				
时间: 2024-08-11 05:25:33

高德定位的相关文章

Android定位开发之百度定位、高德定位、腾讯定位,三足鼎立一起为我所用!

这几天的项目不是非常紧.于是想为未来可能要做的项目做一些技术储备. 下一个项目非常有可能是定位开发,须要用到手机定位功能,于是查了查如今比較流行的第三方定位,最火的基本上就是百度定位>高德定位>腾讯定位了. 想了想不如做一个DEMO把三种定位方式混合一下试试. BaiduLocTool.java package com.dhcc.mixlocation; import android.content.Context; import com.baidu.location.BDLocation;

android:应用程序内定位处理,百度定位,高德定位,系统定位处理.

文章来自:http://blog.csdn.net/intbird 关于定位的几点体验 地图上使用定位 定位信息说明 应用内确保定位返回结果思考 应用内使用定位服务代码 代码基础使用方法 关于定位的几点体验: 百度定位:定位返回很快,很及时,推荐使用,单次定位,能很大程度的保证应用获取位置,5.1的定位有了位置提醒; 高德定位:和系统的很像,需要设置定位的米和时间,有时候不返回,有时候返回一大推,不清楚它机制是什么,不推荐; 系统定位:单纯的户外使用返回还是很不错的,如果是做一个骑行记录轨迹的,

百度定位VS高德定位

高德  下载 添加 AMap_Location  jar包,在AndroidManifest 添加权限,并在 application下 添加申请到的 key 这里还可以添加service,不过我发现不添加也没有影响 <service android:name="com.amap.api.location.APSService"></service> 之后就可以使用定位了,定位得到的 AMapLocation 对象 直接tostring就能得到所有的定位信息. i

mac系统高德定位调试抱key错误的解决办法

原因:调试需要申请调试的key 获取调试key必须获取调试sha1 获取调试sha1的办法: cd ~//切换到当前用户 cd .android keytool -list -v -keystore debug.keystore 默认口令:android 申请发布版本时需要发布版本的key 需要发布版本的sha1 首先切换到 加密文件目录 然后keytool -list -v -keystore cake.jks

Android Studio之高德地图实现定位和3D地图显示

在应用开发中,地图开发是经常需要使用的"组件",国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码. 效果如图: 首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息,如下图: 途中包含了发布版的SHA1安全码和测试版SHA1安全码,两者的值可以看  博客 :Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SH

android利用GPS和高德地图获取定位案例

一.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" an

高德地图之定位篇-----&gt;定位、预测天气、围栏、搜索周边、行踪轨迹

跟集成百度地图一样,首先获取KEY,获取方式(官方的截图) 这篇主要是讲解高德地图定位篇,高德地图定位篇跟高德地图篇是不同的sdk,分离开了... 来看下配置流程吧,配置是第一位的 1.从网站下载并解压得到定位包"Android_Location_V1.xx.jar". 2.开发工程中新建"libs"文件夹,将定位包拷贝到 libs 的根目录下.拷贝完成后的工程目录(以 V1.0.4 为例)如图所示: image 注意:若您在 Eclipse 上使用 adt22 版

详解Android定位

相信很多的朋友都有在APP中实现定位的需求,今天我就再次超炒冷饭,为大家献上国内开发者常用到的三种定位方式.它们分别为GPS,百度和高德,惯例先简单介绍下定位的背景知识. 什么是GPS定位.基站定位和Wi-Fi定位? 1.GPS定位:根据设备GPS芯片和GPS卫星实现定位,GPS定位在室内是不可以使用的.GPS定位精度和芯片本身以及实际使用环境有关,一般情况下,GPS定位精度在10m左右. 2.基站定位:根据设备获取的基站信息实现定位,基站定位精度一般不受使用环境影响,主要和基站的覆盖半径有关.

ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方式

原来定位服务是10分钟收不到定位信息就挂起定位,如今变为最短3分钟,预计都是为了省电吧. 仅仅要你开启应用的后台定位,而且10分钟有一次定位,那么苹果就不会关闭你的线程.如今变成3分钟.若你的应用开启了后台定位,当最短3分钟(经过測试也可能大于3分钟小于等于10分钟)不定位,ios系统也会把你的应用挂起. 而高德地图ios sdk的ios9以上版本号后台定位开启方法变更,而高德导航库没有同步变更,导致使用老的地图库和高德导航地图库的用户定位服务不能实际开启,切换到后台3分钟(经过測试也可能大于3