1、準備html
高德開發者頁面註冊產品 android
1.1 http://www.cnblogs.com/U-tansuo/archive/2013/04/25/unity3d_android_sign.htmlgit
1.2填寫應用應用信息api
1.3下載Android 定位SDK app
http://lbs.amap.com/api/android-location-sdk/locationsummaryide
解壓獲得 AMap_Location_V3.6.1_20171012.jar工具
二.新建Eclipse項目ui
2.1首先新建一個Android工程,在最小SDK版本里選4.0以上,否則在Unity打包的時候會報錯。this
2.2導入AMap_Location_V3.6.1_20171012.jar和Unity提供的JAR庫classes.jar編碼
位置:
D:\Program Files\Unity17103\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Classes
2.3 Java代碼
package com.mirror.locationtest; import android.os.Bundle; import android.util.Log; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationClientOption.AMapLocationMode; import com.amap.api.location.AMapLocationListener; import com.unity3d.player.UnityPlayerActivity;; public class MainActivity extends UnityPlayerActivity { //聲明AMapLocationClient類對象 public AMapLocationClient mLocationClient = null; //聲明AMapLocationClientOption對象 public AMapLocationClientOption mLocationOption = null; //定位回調字符串 private String LocationInfo = "Init String~"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public String GetInfo(){ startLocation(); return LocationInfo; } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); } private void startLocation(){ //初始化定位 mLocationClient = new AMapLocationClient(getApplicationContext()); //設置定位回調監聽 mLocationClient.setLocationListener(mLocationListener); //初始化AMapLocationClientOption對象 mLocationOption = new AMapLocationClientOption(); //設置定位模式爲AMapLocationMode.Hight_Accuracy,高精度模式。 mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); //設置定位間隔,單位毫秒,默認爲2000ms,最低1000ms。 mLocationOption.setInterval(2000); //給定位客戶端對象設置定位參數 mLocationClient.setLocationOption(mLocationOption); //啓動定位 mLocationClient.startLocation(); } public AMapLocationListener mLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation location) { // TODO Auto-generated method stub if (location != null) { if (location.getErrorCode() == 0) { StringBuffer sb = new StringBuffer(256); sb.append("時間: "); sb.append(location.getTime()); sb.append("\n緯度:"); sb.append(location.getLatitude()); sb.append("\n緯度:"); sb.append(location.getLongitude()); sb.append("\n精度:"); sb.append(location.getAccuracy()); sb.append("\n地址:"); sb.append(location.getAddress()); sb.append("\n國家信息:"); sb.append(location.getCountry()); sb.append("\n省信息:"); sb.append(location.getProvince()); sb.append("\n城市信息:"); sb.append(location.getCity()); sb.append("\n城區信息:"); sb.append(location.getDistrict()); sb.append("\n街道信息:"); sb.append(location.getStreet()); sb.append("\n街道門牌號信息:"); sb.append(location.getStreetNum()); sb.append("\n城市編碼:"); sb.append(location.getCityCode()); sb.append("\n地區編碼:"); sb.append(location.getAdCode()); sb.append("\n定位點AOI信息:"); sb.append(location.getAoiName()); LocationInfo = sb.toString(); } else { mLocationClient.stopLocation(); mLocationClient.startLocation(); LocationInfo ="定位出現錯誤,"+location.getErrorCode()+","+location.getErrorInfo(); } } else { LocationInfo="定位完全失敗"; } } }; }
2.4AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mirror.locationtest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <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> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <service android:name="com.amap.api.location.APSService"></service> <activity android:name="com.mirror.locationtest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.amap.api.v2.apikey" android:value="041cc66fb397b6f30cdb8683d24c7833"> </meta-data> </application> </manifest>
2.5Eclipse選中咱們的工程文件夾,能夠先點擊工具欄的Project->clean,再Project->Build Project。而後右鍵Export,選導出爲JAR文件導出jar包
2.6Unity部分
將安卓工程的文件拷貝到Unity工程的Plugins->Android文件夾裏。沒有這個目錄的話須要本身建立一個。文件夾目錄以下,把咱們剛剛導出的JAR文件放在的bin文件夾中,另外還須要把咱們的安卓工程目錄裏把libs文件夾和res文件夾以及AndroidManifest文件拷貝進去,注意拷貝完要把libs文件夾裏面的classes.jar文件刪掉,否則文件會衝突
2.7代碼GetLocationInfo.CS
using UnityEngine; using UnityEngine.UI; public class GetLocationInfo : MonoBehaviour { public Text text; // Use this for initialization void Start() { InvokeRepeating("StartLocation", 1, 5); } public void StartLocation() { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); text.text = jo.Call<string>("GetInfo"); } }
2.8運行結果
2.9Unity打包配置
三根據返回錯誤代碼判斷錯誤
3.1錯誤代碼對照表
http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode