1 Constructs2 android Java工程准备
1) 将Constructs2工程导出Android工程。
2) 创建Crosswalk cordova工程。
3) 将第2步创建的Crosswalk cordova工程中的cordova.js文件(路径为assets/www)复制到第1步创建的工程的根目录下。
4) 将Constructs2 导出的Android工程复制到前面创建的Crosswalk cordova工程的assets目录下,
5) 移除原来的www文件夹,并将Constructs2 导出的Android工程的目录名修改为www。
经过以上步骤,则将成功创建一个Android Java app工程。
2 易接Java SDK使用准备
请参考Java SDK的使用前准备。
3 游戏接口
以下接口可以参考yijieconstructs2demo。
3.1 易接android Java部分初始化
找到由Crosswalk cordova自动创建的游戏工程的主Activity,
主Activity是继承自org.apache.cordova.CordovaActivity的Activity。
并在主Activity的onCreate()方法中增加如下代码来初始化易接SDK。
比如,src/com/yijie/ghostshooter/GhotstShooterActivity.java文件:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.init();
SFCommonSDKInterface.onInit(this);
boolean b = SFCommonSDKInterface.isMusicEnabled(this);
appView.addJavascriptInterface(new SFJsInterface(this, appView), "SFJsInterface");
// Set by <content src="/index.html" /> in config.xml
super.loadUrl(Config.getStartUrl());
// super.loadUrl("file:///android_asset/www/index.html");
}
@Override
public void onResume() {
super.onResume();
}
@Override
public booleanonKeyDown(intkeyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
SFCommonSDKInterface.onExit(this, new SFGameExitListener() {
@Override
public void onGameExit(boolean flag) {
if (flag) {
System.exit(0);
}
}
});
// System.exit(0);
return true;
}
return super.onKeyDown(keyCode, event);
}
3.2 易接Java SDK接口说明
请参易接Java SDK接口。
3.3 添加JS接口
需要创建一个连通JS和Java层的接口,以便于在Constructs2的html代码中可以执行支付、退出等功能。
并需要在游戏工程主Activity的onCreate()方法中,super.loadUrl(Config.getStartUrl())执行之前,
通过调用appView.addJavascriptInterface(new SFJsInterface(this, appView), "SFJsInterface")注册该接口。
JS接口的一个示例实现如下:
public class SFJsInterface {
private static final String TAG = "SFJsInterface";
private Activity mActivity;
private CordovaWebViewmAppView;
public SFJsInterface(Activity activity, CordovaWebViewappView) {
mActivity = activity;
mAppView = appView;
}
@JavascriptInterface
public void pay(String billingIndex) {
Log.i(TAG, "billingIndex = " + billingIndex);
SFCommonSDKInterface.pay(mActivity, billingIndex, new PayListener());
}
@JavascriptInterface
public void exit() {
SFCommonSDKInterface.onExit(mActivity, new SFGameExitListener() {
@Override
public void onGameExit(boolean flag) {
if (flag) {
System.exit(0);
}
}
});
}
class PayListener extends SFIPayResultListener {
@Override
public void onCanceled(String remain) {
mAppView.evaluateJavascript(
"(function() { return { var1: \"variable3\", var2: \"variable4\" }; })();",
new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.i(TAG, "receive in failed, value = " + value);
}
});
}
@Override
public void onFailed(String remain) {
mAppView.evaluateJavascript(
"(function() { return { var1: \"variable3\", var2: \"variable4\" }; })();",
new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.i(TAG, "receive in failed, value = " + value);
}
});
}
@Override
public void onSuccess(String remain) {
mAppView.post(new Runnable() {
@Override
public void run() {
mAppView.evaluateJavascript(
"(function() { return { var1: \"variable1\", var2: \"variable2\" }; })();",
new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.i(TAG, "receive in success, value = " + value);
}
});
}
});
}
}
}
3.4 在Cosntructs2 JS代码中执行支付、退出动作
在JS层,可以通过前面注册的JS接口,来执行支付、退出等动作。如采用类似下面的方法:
<a href="#" onclick="pay0()">Pay billing index 0</a>
<a href="#" onclick="pay1()">Pay billing index 1</a>
<a href="#" onclick="pay2()">Pay billing index 2</a>
<a href="#" onclick="exit()">Exit</a>
<script>
function pay0() {
SFJsInterface.pay("0");
}
function pay1() {
SFJsInterface.pay("1");
}
function pay2() {
SFJsInterface.pay("2");
}
function exit() {
SFJsInterface.exit();
}
</script>