cocos2dx接百度定位SDK(Android)

原创 2018年04月17日 13:05:25

步骤:

第一步:

到百度地图开发平台申请AK,SHA1获得方式如图

第二步:

下载SDK:BaiduLBS_AndroidSDK_Lib,把文件夹内容拷贝到工程/proj.android/libs目录下

第三步:

在AndroidManifest.xml的application下添加

<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="自己项目的AK" >
</meta-data>
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
<intent-filter>
<action android:name="com.baidu.location.service_v2.2" >
</action>
</intent-filter>
</service>
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

第四步:

在AppActivity.java中添加

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.Poi;
public class AppActivity extends Cocos2dxActivity {
// 百度定位
	public static LocationClient mLocationClient = null;
	private static MyLocationListener myListener = null;
	public static native void Result(String res);

	//----------百度定位功能开始--------
	// 初始化
	public static void InitLocation()
    {
		if(mLocationClient == null)
		{
			mLocationClient = new LocationClient(AppActivity.getInstance());   
			myListener = new MyLocationListener();		
			mLocationClient.registerLocationListener(myListener); 
		}
		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationMode.Hight_Accuracy);
		option.setCoorType("bd09ll");
		option.setScanSpan(1000);
		option.setOpenGps(true);
		option.setLocationNotify(true);
		option.setIgnoreKillProcess(false);
		option.SetIgnoreCacheException(false);
		option.setWifiCacheTimeOut(5*60*1000);
		option.setEnableSimulateGps(false);
		mLocationClient.setLocOption(option);
	}
	
	// 开始定位
	public static void StartLocate()
	{
		mLocationClient.start();
	}
    
	// 回调结果
	public static class MyLocationListener implements BDLocationListener 
	{
		@Override
		public void onReceiveLocation(BDLocation location)
		{
			double latitude = location.getLatitude();    //获取纬度信息
			double longitude = location.getLongitude();  //获取经度信息
			float radius = location.getRadius();    	 //获取定位精度,默认值为0.0f		
			String coorType = location.getCoorType();	 //获取经纬度坐标类型		
			int errorCode = location.getLocType();		 //获取定位类型、定位错误返回码		
			StringBuffer sb = new StringBuffer(256);
			sb.append(latitude);
			sb.append(",");
			sb.append(longitude);
			Result(sb.toString());
		}
	}
    //----------百度定位功能结束--------
}

第五步:

在Android.mk中添加

#####################################################
include $(CLEAR_VARS)
LOCAL_MODULE := liblocSDK7b
LOCAL_SRC_FILES := ../../Classes/Core/Utils/PhoneUtils/android/BaiduLBS/libs/Android/$(TARGET_ARCH_ABI)/liblocSDK7b.so
include $(PREBUILT_SHARED_LIBRARY)
#####################################################

# _COCOS_LIB_ANDROID_BEGIN
#####################################################
LOCAL_SHARED_LIBRARIES += liblocSDK7b
#####################################################
# _COCOS_LIB_ANDROID_END

第六步:

C++代码

#include "LocationManager.h"

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#endif

void LocationManager::OnResult(string city)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    if (OnLocationResult) OnLocationResult(city);
    OnLocationResult = nullptr;
#endif
}

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
extern "C" {
    void Java_org_cocos2dx_cpp_AppActivity_Result(JNIEnv *env, jobject obj, jstring jresult)
    {
        std::string result = env->GetStringUTFChars(jresult, nullptr);
        LocationManager::getInstance()->OnResult(result);
    }
}
#endif

bool Locate()
{
    
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    cocos2d::JniMethodInfo payM;
    bool isHave = cocos2d::JniHelper::getStaticMethodInfo(payM, "org/cocos2dx/cpp/AppActivity", "StartLocate",	"()V");
    bool resulte = false;
    if (isHave)
    {
        payM.env->CallStaticVoidMethod(payM.classID, payM.methodID);
    }
    else
    {
        return  false;
        CCLOG("get StartLocate function is fail");
    }
    
#endif
    return true;
    
}

void LocationManager::InitLocation()
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    
    cocos2d::JniMethodInfo payM;
    bool isHave = cocos2d::JniHelper::getStaticMethodInfo(payM, "org/cocos2dx/cpp/AppActivity", "InitLocation","()V");
    if (isHave)
    {
        payM.env->CallStaticVoidMethod(payM.classID, payM.methodID);
    }
    else
    {
        CCLOG("get InitLocation function is fail");
    }
#endif
}

bool LocationManager::GetCity(std::function<void(std::string)> _OnLocationResult)
{
    InitLocation();
    OnLocationResult = _OnLocationResult;
    return Locate();
}

第七步:

OJBK!




cocos2d-x 3.x 集成百度地图(Android IOS)

QQ:2813610155 折腾了好几天,终于搞定了,等项目上线了有时间详细完善这篇文章,有需要的朋友先QQ联系我吧...
  • xujiayin
  • xujiayin
  • 2015-09-12 19:09:20
  • 1885

百度定位sdk接入

1:根据百度官方文档配置后台 2:c++代码 a:LexLocation.hpp #pragma once #include #include ...
  • Liu_coco
  • Liu_coco
  • 2017-02-09 15:12:51
  • 946

Android 百度定位SDK(v6.1.3)结合方向传感器

概述这是第二篇关于百度地图SDK的博客。推荐阅读: Android 百度地图周边雷达(v6.1.3)Android 百度鹰眼轨迹SDK(v2.1.6)今天主要写百度地图定位和方向传感器结合这么一个中...
  • qq_17250009
  • qq_17250009
  • 2016-03-22 11:06:32
  • 3860

有关Cocos项目里面接入高德SDK的方式

咳咳,写博客了! 1.有关高德开放平台的审核工作 高德开放平台传送门 首先就是要注册账号,分为个人开发者和企业开发者两种身份,企业开发者审核期为三天,权限和服务也会更多。然后创建自己...
  • u013517637
  • u013517637
  • 2017-01-04 18:13:42
  • 3231

cocos2dx lua 安卓接付费SDK

完成支付的过程需要2步骤,1.支付请求 2.将支付返回的结果获取到(支付成功或者失败,失败的原因) 因为是lua项目,所以除了java跟c++之间的一些交互外,还有c++跟lua之间的交互 一.请求支...
  • whitemouse0623
  • whitemouse0623
  • 2016-05-20 15:56:29
  • 1107

cocos2dx安卓第三方登录支付sdk接入

一般来说,只要要接入一个登录支付sdk,按技术文档的要求接入就可以了。但是我们用的是cocos2dx,也就是要和java交互。所以我们需要清楚两样技术 ,jni和thread。 jni jni是j...
  • qw503495315
  • qw503495315
  • 2015-12-20 16:53:47
  • 1804

cocos2dx android SDK接入总结

在游戏开发中,对接入三方支付SDK的总结,(此处主要以移动的支付sdk为例, 说说操作的大体步骤 或 其中遇到的一些问题。) 问题:1.三方库的拷贝问题,(如果是将*.so放在lib...
  • Anzhongliu
  • Anzhongliu
  • 2016-06-08 16:50:03
  • 426

[Android开发]cocos2dx工程中接入支付宝sdk

cocos2dx工程中接入支付宝sdk 1. 首先去支付宝官网下载开发者文档 2. 然后按着开发者文档将支付宝的sdk导入到你的工程中,并关联到工程中,步骤入下图: (1)将从支付宝官方网站获得的...
  • Anzhongliu
  • Anzhongliu
  • 2016-06-08 16:53:38
  • 1642

Android 百度定位SDK

官方文档:http://lbsyun.baidu.com/index.php?title=android-locsdk 1.获取AK 发布版: keytool -v -list -keyst...
  • shui1025701856
  • shui1025701856
  • 2018-01-11 11:05:46
  • 340

cocos2dx-3.1 接入多盟广告sdk+Android

经过几天的研究,再加上大神们的指导,终于cocos连接多盟广告sdk成功了。       连接第三方sdk,要先了解eclipse的一些用法,和看懂些Java代码,及一些xml,C++调用Jav...
  • zhanghow
  • zhanghow
  • 2016-12-07 21:13:12
  • 489
收藏助手
不良信息举报
您举报文章:cocos2dx接百度定位SDK(Android)
举报原因:
原因补充:

(最多只允许输入30个字)