Unity3D 和 Android 交互
作者:沃德
- 2022 年 7 月 20 日
本文字数:4192 字
阅读完需:约 14 分钟
unity 项目/Assets/Plugins/Android 目录下是一个 android 项目目录把资源文件和所依赖的库文件放到相应的文件夹中,ps:这个目录需要首先 run 一次项目自动生成。assets 目录,libs 目录,runtime 目录等,bin 下的 class.jar 文件是需要 android 功能导出主 jar 包。1,2,主 activity 继承 UnityPlayerActivity
package lisi.dktest;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;
import com.unicom.xiaowo.Pay;
import com.unicom.xiaowo.Pay.UnipayPayResultListener;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
public class InitActivity extends UnityPlayerActivity {
static String[] testStr = new String[]{
"渠道计费测试0.1元"
};
private final UIActivityHandler uiHandler = new UIActivityHandler(this);
public static class UIActivityHandler extends
WeakHandler<InitActivity> {
public UIActivityHandler(InitActivity owner) {
super(owner);
}
public void handleMessage(Message msg) {
InitActivity owner = getOwner();
if (owner == null) {
return;
}
owner.handleUIMessage(msg);
}
}
public void handleUIMessage(Message msg) {
PayDto payDto = (PayDto)msg.obj;
switch(msg.what){
case 1:
Toast.makeText(InitActivity.this, "道具购买成功!\n金额:" + payDto.getStrPrice() + "元", 1).show();
String resultDesc1 = "道具购买成功!\n金额:" + payDto.getStrPrice() + "元";
UnityPlayer.UnitySendMessage(payDto.getU3dObjName(), "OnBuySuccess", "3010 " + resultDesc1);
break;
case 2:
Toast.makeText(InitActivity.this, "购买失败", 1).show();
String resultDesc2 = "购买失败";
UnityPlayer.UnitySendMessage(payDto.getU3dObjName(), "OnBuyFailed", "3011 " + resultDesc2);
Toast.makeText(InitActivity.this, "支付失败", Toast.LENGTH_LONG).show();
break;
case 3:
Toast.makeText(InitActivity.this, "玩家取消支付", 1).show();
String resultDesc3 = "玩家取消支付";
UnityPlayer.UnitySendMessage(payDto.getU3dObjName(), "OnBuyFailed", "3012 " + resultDesc3);
break;
case 5:
pay(payDto);
break;
}
}
protected final void postMessage(int what, Object object) {
Message.obtain(uiHandler, what, object).sendToTarget();
}
Format format = new SimpleDateFormat("yyMMddHHmmss");
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void Buy(String ItemID, String strPrice, String U3dObjName, String strCP, String strProductName){
Log.v("Buy","ItemID:"+ItemID);
Log.v("Buy","strPrice:"+strPrice);
Log.v("Buy","U3dObjName:"+U3dObjName);
Log.v("Buy","strCP:"+strCP);
Log.v("Buy","strProductName:"+strProductName);
// String orderid = format.format(new Date());
// StringBuffer sb = new StringBuffer(orderid);
// for(int i =0;i<36-orderid.length();i++){
// sb.append('0');
// }
String productName ="";
productName = strProductName.replace("coins", "金币");
String strProductNameStr = productName.replace(" ", "");
PayDto payDto = new PayDto();
payDto.setItemID(ItemID);
payDto.setStrPrice(strPrice);
payDto.setU3dObjName(U3dObjName);
payDto.setStrCP(strCP);
payDto.setStrProductName(strProductNameStr);
postMessage(5,payDto);
}
public void pay(final PayDto payDto){
StringBuffer priceBuffer = new StringBuffer(payDto.getStrPrice());
String priceYuan = payDto.getStrPrice();
priceBuffer.append("00");
Log.v("Buy","price:"+priceBuffer);
String code = "";
String payTypeStr = "";
String price = priceBuffer.toString();
String strPrice="";
if("100".equals(price)){
code = "161226568158";
}else if("200".equals(price)){
code = "161226568159";
strPrice = "0200";
payTypeStr = PayType.PAY_TYPE_002;
}else if("300".equals(price)){
code = "161226568160";
}else if("400".equals(price)){
code = "161226568161";
strPrice = "0400";
payTypeStr = PayType.PAY_TYPE_004;
}else if("500".equals(price)){
code = "161226568162";
}else if("600".equals(price)){
code = "161226568163";
}else if("700".equals(price)){
code = "161226568164";
}else if("800".equals(price)){
code = "161226568165";
strPrice = "0800";
payTypeStr = PayType.PAY_TYPE_008;
}else if("900".equals(price)){
code = "161226568166";
}else if("1000".equals(price)){
code = "161226568167";
strPrice = "1100";
payTypeStr = PayType.PAY_TYPE_010;
}else if("1100".equals(price)){
code = "161226568168";
}else if("1200".equals(price)){
code = "161226568169";
}else if("1300".equals(price)){
code = "161226568170";
}else if("1400".equals(price)){
code = "161226568171";
}else if("1500".equals(price)){
code = "161226568172";
}else if("1600".equals(price)){
code = "161226568173";
}else if("1700".equals(price)){
code = "161226568174";
}else if("1800".equals(price)){
code = "161226568175";
}else if("1900".equals(price)){
code = "161226568176";
}else if("2000".equals(price)){
code = "161226568177";
strPrice = "2000";
//这里有可能是1200金币,也有可能是2200金币
// payTypeStr = PayType.PAY_TYPE_020;
}else if("2100".equals(price)){
code = "161226568178";
}else if("2200".equals(price)){
code = "161226568179";
}else if("2300".equals(price)){
code = "161226568180";
}else if("2400".equals(price)){
code = "161226568181";
}else if("2500".equals(price)){
code = "161226568182";
}else if("2600".equals(price)){
code = "161226568183";
}else if("2700".equals(price)){
code = "161226568184";
}else if("2800".equals(price)){
code = "161226568185";
}else if("2900".equals(price)){
code = "161226568186";
}else if("3000".equals(price)){
code = "161226568187";
}
String productName = payDto.getStrProductName();
if(productName!=null){
if("1200金币".equals(productName)){
payTypeStr = PayType.PAY_TYPE_020;
}else if ("2200金币".equals(productName)){
payTypeStr = PayType.PAY_TYPE_120;
}
}
Log.v("tag","code:"+code);
Log.v("tag","productName:"+payDto.getStrProductName());
Log.v("tag","priceYuan:"+priceYuan);
Log.v("tag","payDto.getOrderId():"+payDto.getOrderId());
String orderid =new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+strPrice+"609"+payTypeStr;
// Pay.getInstance().payChannel(ChannelPayActivity.this ,
// "游戏测试", "小沃科技有限公司", "130201102727","沃VAC短代测试-0.1元","0.1", sb.toString(), new UnipayPayResultListener() {
Log.v("tag Pay","code:"+code);
Log.v("tag Pay","productName:"+productName);
Log.v("tag Pay","priceYuan:"+priceYuan);
Log.v("tagPay","orderid:"+orderid);
if("2200金币".equals(productName)){
postMessage(1,payDto);
}else{
Pay.getInstance().payChannel(InitActivity.this,
"天天萌萌推", "北京凤凰互动娱乐网络技术有限公司",code,productName,priceYuan, orderid, new UnipayPayResultListener() {
@Override
public void PayResult(String arg0, int arg1, int arg2, String arg3) {
Log.v("Buy","arg1:"+arg1);
Log.v("Buy","arg3:"+arg3);
if(arg1 == 1){
postMessage(1,payDto);
}else if(arg1 == 2){
postMessage(2,payDto);
}else if(arg1 == 3){
postMessage(3,payDto);
}
}
});
}
}
}
复制代码
调用
using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (AndroidJavaObject curActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
{
pay(curActivity.GetRawObject(), strAppleShopItemID, "Main Camera", "PayResult");
//TCPClient.AddLog("Andriod_YiJie OnBuy (2):" + Time.time);
}
}
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 4
沃德
关注
我就是个零 2018.06.14 加入
程序员而已
评论