Unity接入高德SDK实现定位

一.在高德官网下载需要对应的SDK  http://lbs.amap.com/api/android-location-sdk

    通过SHA1值获取对应的key值    

   a.SHA1值得获取:  1.在cmd中定位到 .android

     2.输入keytool -list -v -keystore debug.keystore   口令是:android   

二.导入下载的高德sdk  和classes  jar文件放在lib文件下


      并点击右键添加依赖

三.编写主函数

public class MainActivity extends UnityPlayerActivity

{
    //声明mLocationClient对象
    public AMapLocationClient mLocationClient = null;
    public AMapLocationClientOption mLocationOption = null;
    private String LocationInfo;
    private String ErrorInfo="";

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }
    //获取定位信息
    public String[] GetInfo()
    {
        String[] a=new String[2];
        a[0]=this.LocationInfo;
        a[1]=this.ErrorInfo;
        startLocation();

        return a;
    }

    protected void onStart()
    {
        super.onStart();
    }

    private void startLocation()
    {
        this.mLocationClient = new AMapLocationClient(getApplicationContext());
        //回调监听
        this.mLocationClient.setLocationListener(this.mLocationListener);
        //初始化定位参数
        this.mLocationOption = new AMapLocationClientOption();

        this.mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        this.mLocationOption.setInterval(1000L);
        this.mLocationOption.setHttpTimeOut(10000l);
        this.mLocationOption.setNeedAddress(true);
        this.mLocationClient.setLocationOption(this.mLocationOption);
        this.mLocationClient.startLocation();
    }

    public AMapLocationListener mLocationListener = new AMapLocationListener() {
        @Override
        public void onLocationChanged(AMapLocation location) {

            if (location != null) {
                if (location.getErrorCode() == 0) {
                    StringBuffer sb = new StringBuffer(256);
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date date = new Date(location.getTime());
                    String time=df.format(date);
                    sb.append("时间: " + time);
                    sb.append("\n纬度:" + location.getLatitude());
                    sb.append("\n经度:" + location.getLongitude());
                    sb.append("\n精度:" + location.getAccuracy());
                    sb.append("\n地址:" + location.getAddress());
                    sb.append("\n国家信息:" + location.getCountry());
                    sb.append("\n省信息:" + location.getProvince());
                    sb.append("\n城市信息:" + location.getCity());
                    sb.append("\n城区信息:" + location.getDistrict());
                    sb.append("\n街道信息:" + location.getStreet());
                    sb.append("\n街道门牌号信息:" + location.getStreetNum());
                    sb.append("\n城市编码:" + location.getCityCode());
                    sb.append("\n地区编码:" + location.getAdCode());
                    LocationInfo = sb.toString();
                }else {
                    StringBuffer errorinfo = new StringBuffer(256);
                    errorinfo.append("错误代码:"+location.getErrorCode());
                    errorinfo.append("\n"+location.getErrorInfo());
                    ErrorInfo=errorinfo.toString();
                }
            }
        }
    };

四.将模块打包成aar格式供unity交互

      修改 build.gradle文件

  第一步:将apply plugin: 'com.android.appcation'修改为

apply plugin: 'com.android.library'
第二部:删除  applicationId "com.test.sdk1"   
 
 
第三步:在AndroidMainfest文件中修改
android:theme="@android:style/Theme.NoTitleBar">  添加
<meta-data android:name="unityplayer.UnityActivity" android:value="true"/> 
第四步:在AndroidManifest.xml的application标签中配置Key:
<meta-data android:name="com.amap.api.v2.apikey" android:value="您的Key"></meta-data>
             在application标签中声明service组件:
<service android:name="com.amap.api.location.APSService"></service>          
          在AndroidManifest.xml中配置权限:
<!--用于进行网络定位-->
<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>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
最后build就可以打包成aar包了
五.unity中访问android

  将打包出来的aar文件和AndroidMainifest文件放在Plugins/Android文件夹下

    

 此时就可以编写c#代码了

    

public class Test : MonoBehaviour
{

    public Text content;
    public Button button;
    AndroidJavaClass jc;
    AndroidJavaObject jo;
    void Start()
    {
        content.text = "654321";
        OnStart();

    }
    public void GetLocation()
    {
        string[] a;
        OnStart();
        a = jo.Call<string[]>("GetInfo");
        content.text = a[0];
        if (a[1] != "")
        {
            content.text = a[1];
        }
    }
    void OnStart()
    {
        jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
    }

   unity调用android中的一些函数

这样就简单的实现高德的定位功能啦!

猜你喜欢

转载自blog.csdn.net/chenzhe_n/article/details/80807149