안 드 로 이 드 패키지 고 덕 지도 포 지 셔 닝 도구 류 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 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 패키지 고 덕 포 지 셔 닝 도구 류 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.