QUICK-COCOS2DX 2.2.3接入短信SDK教程

說實話 ,其實接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", "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了,暫時到這裏 ,急着下班,有問題歡迎留言。。。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章