首页 > 学院 > 开发设计 > 正文

百度定位sdk接入

2019-11-09 14:49:28
字体:
来源:转载
供稿:网友

1:根据百度官方文档配置后台

2:c++代码

a:LexLocation.hpp

#PRagma once

#include <string>

#include <functional>

namespace Lex

{

void InitLocation();

bool GetCity(std::function<void(std::string)> OnLocationResult);

}

b:LexLocation.cpp

#include "LexLocation.hpp"

#include "cocos2d.h"

#include "platform/android/jni/JniHelper.h"

static std::function<void(std::string)> OnLocationResult;

namespace  Lex

{

void OnResult(std::string city)

{

if (OnLocationResult) OnLocationResult(city);

OnLocationResult = nullptr;

}

extern"C" {

void java_lexlib_bdLocate_BDLocateCall_Result(JNIEnv *env, jobject obj, jstring jresult)

{

       std::string result = env->GetStringUTFChars(jresult,nullptr);

CCLOG("11111111111111111111111111111111111%s", result.data());

OnResult(result);

}

}

bool Locate()

{

cocos2d::JniMethodInfo payM;

bool isHave = cocos2d::JniHelper::getStaticMethodInfo(payM,"lexlib/bdLocate/BDLocateCall","StartLocate",

  "()V");

bool resulte =false;

if (isHave)

{

payM.env->CallStaticVoidMethod(payM.classID, payM.methodID);

}

else

{

return false;

CCLOG("get StartLocate function is fail");

}

returntrue;

}

void InitLocation()

{

cocos2d::JniMethodInfo payM;

bool isHave = cocos2d::JniHelper::getStaticMethodInfo(payM,"lexlib/bdLocate/BDLocateCall","InitLocation",

  "()V");

if(isHave)

{

payM.env->CallStaticVoidMethod(payM.classID, payM.methodID);

}

else

{

CCLOG("get InitLocation function is fail");

}

}

bool GetCity(std::function<void(std::string)> _OnLocationResult)

{

OnLocationResult = _OnLocationResult;

return Locate();

}

}

3:java代码

a:BDLocateCall.java

package lexlib.bdLocate;

import org.cocos2dx.cpp.AppActivity;

import org.cocos2dx.lib.Cocos2dxGLSurfaceView;

import android.R.bool;

import android.util.Log;

public class BDLocateCall {

publicstatic void InitLocation()

    {

    AppActivity.mainAct.runOnUiThread(new Runnable(){

    publicvoid run() 

{

BDLocateSDK.initLocation();

}

    });

    }

publicstatic void StartLocate()

{

Log.v("333333","66666666666");

AppActivity.mainAct.runOnUiThread(new Runnable(){

    publicvoid run() 

{

  BDLocateSDK.start();

}

    });

}

    

    publicstatic void _Result(final String res)

    {

    Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable()

{

      publicvoid run()

      {

      Result(res);

      }

});

    }

    

    nativepublic staticvoid Result(String city);

}

b:BDLocateSDK.java

package lexlib.bdLocate;

import android.app.Activity;

import java.util.List;

import org.cocos2dx.lib.Cocos2dxGLSurfaceView;

import com.baidu.location.BDLocation;

import com.baidu.location.BDLocationListener;

import com.baidu.location.LocationClient;

import com.baidu.location.LocationClientOption;

import com.baidu.location.LocationClientOption.LocationMode;

//import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类

import com.baidu.location.Poi;

import android.util.Log;

public class BDLocateSDK {

publicstatic LocationClient mLocationClient =null;

publicstatic Activity act = null;

publicstatic class MyLocationListenerimplements BDLocationListener 

{

 

        @Override

        publicvoid onReceiveLocation(BDLocation location) 

        {

            //Receive Location

        StringBuffer sb = new StringBuffer(256);

        

        if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位结果

                sb.append(location.getProvince());

                sb.append(".");

                sb.append(location.getCity());

                BDLocateCall._Result(sb.toString());

                

            } elseif (location.getLocType() == BDLocation.TypeNetWorkLocation){//网络定位结果

            sb.append(location.getProvince());

                sb.append(".");

                sb.append(location.getCity());

                BDLocateCall._Result(sb.toString());

                

            } elseif (location.getLocType() == BDLocation.TypeOffLineLocation) {//离线定位结果

                BDLocateCall._Result(sb.toString());

            } else {

            String s = " ";

            s = s + location.getLocType();

            Log.v("222222", s);

            }

        }

            

}

publicstatic void init(Activity activity )

{

act = activity;

}

publicstatic void initLocation()

{

if(mLocationClient ==null)

{

mLocationClient = new LocationClient(act); 

final BDLocationListener listener =new MyLocationListener();

mLocationClient.registerLocationListener(listener);

}

LocationClientOption option =new LocationClientOption();

        option.setLocationMode(LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备

        option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系

        int span=0;

        option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的

        option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要

        option.setOpenGps(true);//可选,默认false,设置是否使用gps

        option.setLocationNotify(true);//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果

        option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”

        option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到

option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死  

        option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集

option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤GPS仿真结果,默认需要

        mLocationClient.setLocOption(option);

}

publicstatic void start()

{

mLocationClient.start();

}

}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表