这两天用到了定位的需求,其实这这个功能是很简单的,今天写出来主要是为了记录那些超级难记忆的权限,顺便将我在写的过程中的一些问题写出来,希望可以帮助有些人们学习;

首先我觉得下面的步骤才是最重要的:

1,你想使用高德地图的api 你必须有一个属于自己的 key

2,想要一个key,必须有一个叫 sha1的东西,sha1获得方法 百度一下;

3,然后就是 自己的Android'Maniofestd的注册了 ,注册要点请看下文;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;


这是我导入的包名;这些包都包含在 AMap_Lacation_V3.3.0_20170118的jar包中;但是我更希望你们可以去官网下载:高德地图sdk下载

下面就是我的部分代码:

public class MainActivity extends Activity  {

    private AMapLocationClient locationClient = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化client
        locationClient = new AMapLocationClient(getApplicationContext());
        //设置定位参数
        locationClient.setLocationOption(getDefaultOption());
        // 设置定位监听
        locationClient.setLocationListener(new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation loc) {
               
                if (null != loc) {
                    if(loc.getErrorCode()==0){
                       
                        Log.e("ok",loc.getAddress());
                    }else{
                        Log.e("errorInfo",loc.getErrorInfo());
                    }
                } else {
                    Log.e("no","定位失败");
                }
            }
        });
        locationClient.startLocation();

        }

    private AMapLocationClientOption getDefaultOption(){
        AMapLocationClientOption mOption = new AMapLocationClientOption();
        mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式
        mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭
        mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效
        mOption.setInterval(2000);//可选,设置定位间隔。默认为2秒
        mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是true
        mOption.setOnceLocation(false);//可选,设置是否单次定位。默认是false
        mOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用
        AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
        mOption.setSensorEnable(false);//可选,设置是否使用传感器。默认是false
        mOption.setWifiScan(true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差
        mOption.setLocationCacheEnable(true); //可选,设置是否使用缓存定位,默认为true
        return mOption;
    }

}

注释都写得很清楚,我也就不啰嗦了;

然后就是权限问题了:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->


    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

    <!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->


    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>

    <!-- 请求网络 -->


    <uses-permission android:name="android.permission.INTERNET"/>

    <!-- 不是SDK需要的权限,是示例中的后台唤醒定位需要的权限 -->


    <uses-permission android:name="android.permission.WAKE_LOCK"/>

    <!-- 需要运行时注册的权限 -->


    <!--用于进行网络定位-->


    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <!--用于访问GPS定位-->


    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <!--用于提高GPS定位速度-->


    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>

    <!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->


    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <!--读取缓存数据-->


    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <!--用于读取手机当前的状态-->


    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <!-- 更改设置 -->


    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

    <!-- 3.2.0版本增加 -->


    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

    <!-- 3.2.0版本增加-->


    <uses-permission android:name="android.permission.BLUETOOTH"/>


AndroidManifest的注册:

<meta-data android:name="com.amap.api.v2.apikey"
            android:value="你自己获取到的key"/>

        <service android:name="com.amap.api.location.APSService" />


需要注意的是name="com.amap.api.v2.apikey"必须使用人间api的包名,还有那个service也是必须的;


好了任务完成  希望可以帮助到别人;