说实话 ,其实接SDK相对来说还是比较简单的,但是如果遇到问题,还是需要我们去考虑和分析。

例如说我们在用COCOS2DX-LUA开发的时候,我们接Android的SDK,必须要调用JAVA的方法,

那么我们可以直接用LUA 调用Java,也可以用LUA先调用C++,然后再用C++调用JAVA,那么这两种方法都是

可以的,不过我们既然直接能用LUA调用JAVA,用JAVA调用LUA,我们何必不这样做呢?

不过在这里还是非常感谢这个博主的

源地址:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/#E5B08620lua20function20E4BD9CE4B8BAE58F82E695B0E4BCA0E98092E7BB9920java20E696B9E6B395


那么我们在接SDK的时候,别人都会给你几个文见,有加入权限,配置,.jar包等等,那么还会有一个说明文档,你只需要

按着他的说明文档一个个做就行,基本上不会有太多的问题。


1、首先打开工程的AndroidMainfest.xml文件,在标签内写入

权限和配置信息,例如:

<!-- 接入短信SDK 权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYstemS" />

........


<!-- 需要的权限配置 -->

<service android:name="com.lyhtgh.pay.services.SmsstatusService"></service>

<service android:name="com.lyhtgh.pay.services.SmsDataService"></service>

..........

这里省略了很多,你把你自己需要的直接考进来就行,别搞错就行。

2、把解压下载回来的包,将里面的.jar文件夹考到android工程下的libs文件夹中。这个文件别人会给你的,放心吧。


3、接下来,打开AppActivity.java文件,在onCreate中加入(也可以是其他的.java文件,如果是cocos的话,应该是继承至

Cocos2dxActivity):

那么我自己新建了一个PaySDK.java的文件,然后里面有一个init的方法,我们在AppActivity.java中调用它,

public class AppActivity extends Cocos2dxActivity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

PaySDK.init(this);

}

}


4、我的PaySDK.java文件代码是:

public class PaySDK {

private static Cocos2dxActivity mContent = null;

public static void init(Cocos2dxActivity activity){

System.out.println("调用sdk这个初始化方法");

mContent = activity;

}

public static void payMoney(final String str,final int money,final int luaFunctionId){

System.out.println("调用成功 payMoney : "+str+" money : "+money);

//SDK接口方法

Pay.getInstance(mContent).start(new IPayCallback() {


@Override

public void onFailure() {

System.out.println("调用成功 payMoney : onFailure");

// Todo Auto-generated method stub

//这里是Java调用Lua的方法,并给Lua返回一个字符串

Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunctionId,"Failed");

Toast.makeText(mContent,"onFailure",Toast.LENGTH_LONG).show();

}


@Override

public void onSuccess() {

// Todo Auto-generated method stub

System.out.println("调用成功 payMoney : onSuccess");

//这里是Java调用Lua的方法,并给Lua返回一个字符串

Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunctionId,"success");

Toast.makeText(mContent,"onSuccess",Toast.LENGTH_LONG).show();

}


},mContent, "1","lichao",str,money,"1","1");

}

}


5、我这边PayInsertSDK.lua文件的代码为

local PayInsertSDK = class("PayInsertSDK")
--JAVA 类的名称
local className = "com/uborm/littleworld/PaySDK"
--支付
function PayInsertSDK:everyDayPay()
--发送之前初始化为false
isSuccesspay = false
local function callback(result)
if result == "success" then
print('调用成功的方法')
isSuccesspay = true
elseif result == "Failed" then
print('调用失败以后的回调方法')
isSuccesspay = false
else
print('Java返回未知错误信息')
end
end
--1 1000
local args = {
"1",--计费点编号
1000,--计费价格
callback
}
local sig = "(Ljava/lang/String;II)V"--参数:整数、浮点数,返回值:字符串 (I F Z Ljava/lang/String V)
-- local sig = "(II)I"


if device.platform == "android" then

--调用JAVA方法
local ok,ret = luaj.callStaticmethod(className,"payMoney",args,sig)
if not ok then
print('调luaj error : '..ret)
elseif ret == nil then
print('调用 luaj 成功 ,返回值为空,正确返回了')
else
print('调用 成功 ret :'..ret)--输出
end
end

end


这样基本上就调用成功了,不过我们要注意两个点,一个是返回值和传递的值,还有一个就是看报错信息具体是啥,否则不好调试

签名使用“(依次排列的参数类型)返回值类型”的格式,几个例子如下:

签名 解释
()V 参数:无,返回值:无
(I)V 参数:int,返回值:无
(Ljava/lang/String;)Z 参数:字符串,返回值:布尔值
(IF)Ljava/lang/String; 参数:整数、浮点数,返回值:字符串

这里列出不同类型对应的 Java 签名字符串:

类型名
类型
I 整数,或者 Lua function
F 浮点数
Z 布尔值
Ljava/lang/String; 字符串
V Void 空,仅用于指定一个 Java 方法不返回任何值
根据这些信息来填。

错误代码定义如下:

错误代码
描述
-1 不支持的参数类型或返回值类型
-2 无效的签名
-3 没有找到指定的方法
-4 Java 方法执行时抛出了异常
-5 Java 虚拟机出错
-6 Java 虚拟机出错

~

只要相互之间调用成功了,就一切OK了,暂时到这里 ,急着下班,有问题欢迎留言。。。

QUICK-COCOS2DX 2.2.3接入短信SDK教程的更多相关文章

  1. html5 canvas合成海报所遇问题及解决方案总结

    这篇文章主要介绍了html5 canvas合成海报所遇问题及解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Html5 video标签视频的最佳实践

    这篇文章主要介绍了Html5 video标签视频的最佳实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题

    HTML5在微信内置浏览器下,在右上角菜单的调整字体导致页面显示错乱的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

  4. ios – containerURLForSecurityApplicationGroupIdentifier:在iPhone和Watch模拟器上给出不同的结果

    我使用默认的XCode模板创建了一个WatchKit应用程序.我向iOSTarget,WatchkitAppTarget和WatchkitAppExtensionTarget添加了应用程序组权利.(这是应用程序组名称:group.com.lombax.fiveminutes)然后,我尝试使用iOSApp和WatchKitExtension访问共享文件夹URL:延期:iOS应用:但是,测试NSURL

  5. 适用于iOS和路线的Google Maps SDK

    解决方法库中有一些东西不在文档中,所以如果你正在寻找一个功能,那么值得下载SDK并查看标题.然而,在当前版本1.0.2中,我没有看到任何路由–搜索路线或绘制路线.目前,您唯一的选择可能是使用其他GoogleApi来查找路径,然后正如Lee所说,使用折线绘制它们.

  6. openURL崩溃:iOS 9中可能存在Facebook SDK错误

    也许Facebook的SDK在这个特例上有错误?解决方法我找到了答案看起来它只是一个发布模式问题.通过启用Xcode运行发布版本,我能够调试我的问题.它是由参数sourceApplication引起的,在发布模式下显然需要解包.不知道为什么,但至少我得到它的工作.

  7. 使用最新的Flurry SDK和ios4重新启动应用程序

    我真的希望这对我来说只是一个愚蠢的错误.我很高兴使用Flurry但这样的事情会导致我的应用被拒绝.解决方法我写了关于这个的Flurry,他们很快回到我身边,他们会调查这个.大约一个星期后,他们回信并表示他们已经在v2.6中修复了它,现在可用了.我似乎无法重现这个问题.不是说我很棒或者什么,但我还是单枪匹马地解决了这个问题.

  8. ios – Interface Builder无法确定“Main.storyboard”的类型.这可能是由于缺少SDK

    解决方法这没有你想象的那么复杂.该错误是因为您在Main.storyboard的源代码上输错了一些内容,例如我不小心在Main.storyboard的第一个打开标记之前放了一个“”.1)你必须做的是删除Main.storyboard2)转到垃圾箱,将Main.storyboard移动到桌面,用任何文本编辑器打开并修复代码;然后“全选”和“复制”.3)在Xcode上,创建一个全新的Main.storyboard,然后按右键单击文件并选择OpenAs–>源代码,然后粘贴您在剪贴板上的固定代码.4)右键单击文件

  9. iOS:安装Google移动广告SDK的错误说明?

    为什么我必须在此版本中安装Firebase/Core?

  10. 如何使用iOS SDK保存LinkedIn访问令牌?

    我在我的iOS应用程序中使用LinkedIn.我想保存访问令牌以供将来使用.令牌属于非属性类型,无法直接保存在NSUserDefaults中.我尝试使用NSKeyedArchiver,但我得到了输出:令牌中的文本即将到来,但值将为空.代码段1:我也尝试像这样保存,但结果是一样的:代码段2:我的编码或访问令牌有什么问题需要一些特殊技术来保存吗?请建议.解决方法这就是我拯救的方式.它对我有用.希望它有所帮助以这种方式使用保存的responseBody我希望这次我很清楚

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部