안 드 로 이 드 패키지 고 덕 지도 포 지 셔 닝 도구 류 Util 의 상세 한 절차

전제 조건
매번 프로젝트 를 하거나 회사 의 이전 프로젝트 를 유지 할 때 포 지 셔 닝 을 통 해 경 위 를 얻 는 데 사 용 됩 니 다.우 리 는 안 드 로 이 드 정부 에서 도 경 위 를 얻 는 방법 을 제 공 했 지만 잘 안 되 기 때문에 고 덕 지도 API 를 사 용 했 습 니 다.매번 사용 할 때마다 코드 를 한 무더기 쓸 수 없고 효율 이 낮 습 니 다.그래서 도구 류 로 포장 하 겠 다 고 생각 했 습 니 다.편리 하 게 호출 할 수 있 고 앞으로 의 프로젝트 를 위해 관리 분야 든 검색 분야 든 모두 간결 해 졌 다.
첫 번 째,홈 페이지 에 가서 고 덕 키 만 들 기
홈 페이지 주소:lbs.amap.com/product/loc..


*번 호 를 채 우 고 제출 을 누 르 면 SHA 1 값 을 다음 과 같이 가 져 오 거나 명령 행 을 통 해 가 져 오 면 둘 다 됩 니 다.
Android studio 코드 SHA 1 값 가 져 오기

   Log.e("-->  sha1 ","${sha1(this)}")
fun sha1(context: Context): String {
        try {
            val info: PackageInfo = context.packageManager.getPackageInfo(
                    context.packageName, PackageManager.GET_SIGNATURES)
            val cert: ByteArray = info.signatures.get(0).toByteArray()
            val md: MessageDigest = MessageDigest.getInstance("SHA1")
            val publicKey: ByteArray = md.digest(cert)
            val hexString = StringBuffer()
            for (i in publicKey.indices) {
                val appendString = Integer.toHexString(0xFF and publicKey[i].toInt())
                        .toUpperCase(Locale.US)
                if (appendString.length == 1) hexString.append("0")
                hexString.append(appendString)
                hexString.append(":")
            }
            val result = hexString.toString()
            return result.substring(0, result.length - 1)
        } catch (e: PackageManager.NameNotFoundException) {
            e.printStackTrace()
        } catch (e: NoSuchAlgorithmException) {
            e.printStackTrace()
        }
        return ""
    }

두 번 째 단계  Gradle 을 통 해 SDK 통합(편리):
1.Project 의 build.gradle 파일 에 reposcories 를 설정 하고 maven 또는 jcenter 창고 주 소 를 추가 합 니 다.

allprojects { repositories { jcenter() //    mavenCentral() } }
2.메 인 프로젝트 의 build.gradle 파일 에 dependencies 를 설정 합 니 다.

   //  
   implementation 'com.amap.api:location:latest.integration'
세 번 째 단계    설정 매개 변수
첫 번 째 단계,Android Manifest.xml 설정
application 탭 에 service 구성 요 소 를 설명 하 십시오.모든 app 은 자신의 포 지 셔 닝 서 비 스 를 가지 고 있 습 니 다.

 <!--           2.0          -->
        <service android:name="com.amap.api.location.APSService" >
        </service>
두 번 째 단계,성명 권한 이 항목 에 권한 이 있다 면 추가 할 필요 가 없습니다.

<!--        -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!--    GPS  --> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--         ,                --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--    wifi    ,wifi           -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--    wifi     ,wifi           -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--      ,        -->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--           -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--              -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!--      A-GPS  -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
 
3 단계,고 덕 키 설정:

<meta-data android:name="com.amap.api.v2.apikey" android:value="key">//      key           </meta-data>
네 번 째 단계   위치 추적 데이터 가 져 오기
경위도 가 져 올 페이지 에서 다음 코드 를 호출 합 니 다:

    private var amapLocationUtil: AmapLocationUtil? = null
    
    
     fun initLocationOption() {
        if (null == amapLocationUtil) {
            amapLocationUtil = AmapLocationUtil(CommApplication.getApplication())
        }
        amapLocationUtil!!.initLocation()
        amapLocationUtil!!.startLocation()
        amapLocationUtil!!.setOnCallBackListener { longitude, latitude, location, isSucdess, address ->
       //Log.e("--->", "longitude" + longitude + "
" + "latitude" + latitude + "
" + "isSucdess" + isSucdess + "
" + "address" + address); //Log.e("--->",location.getProvince()+ "
" +location.getCity()+"
"+location.getDistrict()); //isSucdess true false if (isSucdess) { } else { // , amapLocationUtil!!.startLocation() } } }
주의:현재 Activity 에서 실례 화 된 것 이 라면 소각 하 는 것 을 잊 지 마 세 요.

override fun onDestroy() {
        super.onDestroy()
        if (amapLocationUtil != null) {
            amapLocationUtil!!.destroyLocation()
        }
    }
코드 에서 AmapLocationUtil 을 호출 하 는 것 을 보 았 습 니 다.이것 은 제 가 봉 인 된 도구 종류 입 니 다.호출 이 편리 합 니 다.코드 는 다음 과 같 습 니 다.

/**
 *
 * Created by JasonYin
 * Description:      Util
 *
 */
class AmapLocationUtil(private val mContext: Context) {
    private var locationClient: AMapLocationClient? = null
    private var locationOption: AMapLocationClientOption? = null
    private var mOnCallBackListener: onCallBackListener? = null
    /**
     *      
     */
    fun initLocation() { //   client
        if (null == locationClient) {
            locationClient = AMapLocationClient(mContext)
        }
        locationOption = defaultOption
        //      
        locationClient!!.setLocationOption(locationOption)
        //       
        locationClient!!.setLocationListener(locationListener)
    }//  ,      ,         、   、   。        
    //  ,    gps  ,          。    
    //  ,          。   30 。         
    //  ,      。   2 
    //  ,             。   true
    //  ,        。   false
    //  ,      wifi  ,   false.     true,         ,         
    //  ,          。  HTTP  HTTPS。   HTTP
    //  ,         。   false
    //  ,      wifi  。   true,     false         ,             ,          
    //  ,          ,   true
//  ,      ,         、   、   。        
    //  ,    gps  ,          。    

    //            
    private val defaultOption: AMapLocationClientOption
        private get() {
            val mOption = AMapLocationClientOption()
            //            
            if (NetworkUtils.isConnected()) { //  ,      ,         、   、   。        
                mOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
                mOption.isGpsFirst = true //  ,    gps  ,          。    
            } else {
                mOption.locationMode = AMapLocationClientOption.AMapLocationMode.Device_Sensors //  ,      ,         、   、   。        
                mOption.isGpsFirst = true //  ,    gps  ,          。    
            }
            mOption.httpTimeOut = 30000 //  ,          。   30 。         
            mOption.interval = 2000 //  ,      。   2 
            mOption.isNeedAddress = true //  ,             。   true
            mOption.isOnceLocation = false //  ,        。   false
            mOption.isOnceLocationLatest = false //  ,      wifi  ,   false.     true,         ,         
            AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP) //  ,          。  HTTP  HTTPS。   HTTP
            mOption.isSensorEnable = true //  ,         。   false
            mOption.isWifiScan = true //  ,      wifi  。   true,     false         ,             ,          
            mOption.isLocationCacheEnable = true //  ,          ,   true
            return mOption
        }

    var locationListener = AMapLocationListener { location ->
        val sb = StringBuilder()
        if (null != location) { //errCode  0      ,        ,                
            if (location.errorCode == 0) {
                longitude = location.longitude
                latitude = location.latitude
                val district = location.district
                locationSuccess(longitude, latitude, true, location, district)
                //    ,    :      ,  stopLocation()  
                stopLocation()
            } else { //    
//                    sb.append("    " + "
"); // sb.append(" :" + location.getErrorCode() + "
"); // sb.append(" :" + location.getErrorInfo() + "
"); // sb.append(" :" + location.getLocationDetail() + "
"); // Log.e("---> ", sb.toString()); LocationFarile(false, location) } } else { LocationFarile(false, location) } } private fun LocationFarile(isSucdess: Boolean, location: AMapLocation) { if (mOnCallBackListener != null) { mOnCallBackListener!!.onCallBack(0.0, 0.0, location, false, "") } } fun locationSuccess(longitude: Double, latitude: Double, isSucdess: Boolean, location: AMapLocation?, address: String?) { if (mOnCallBackListener != null) { mOnCallBackListener!!.onCallBack(longitude, latitude, location, true, address) } } fun setOnCallBackListener(listener: onCallBackListener?) { mOnCallBackListener = listener } interface onCallBackListener { fun onCallBack(longitude: Double, latitude: Double, location: AMapLocation?, isSucdess: Boolean, address: String?) } /** * */ fun startLocation() { locationClient!!.startLocation() } /** * */ fun stopLocation() { locationClient!!.stopLocation() } /** * */ fun destroyLocation() { if (null != locationClient) { /** * AMapLocationClient Activity , * Activity onDestroy AMapLocationClient onDestroy */ locationClient!!.onDestroy() locationClient = null locationOption = null } } companion object { var longitude = 0.0 var latitude = 0.0 } }
총결산
안 드 로 이 드 패키지 고 덕 지도 포 지 셔 닝 도구 류 Util 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 패키지 고 덕 포 지 셔 닝 도구 류 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기