使用URL 启动unity Andriod APP并传递参数
我的棋牌游戏需要一个功能:
房主微信分享一个内容(微信的URL),上面包含有url,标题,内容,略图。当被邀请人点击分享的内容,可以直接开启这个游戏,并登录后直接登录这个房间。不需要人工记忆房间号等。
OK,这里我们就要用到几个知识点:
1、微信SDK-分享URL
2、Andriod APP 的URL启动并传参
3、网页的获取URL参数以及在超链接中加入参数(因为安卓的URL启动模式是 justlovepaohuzi://hmok/JoinRoom?roomID=,在本地是无法实现的,必须通过浏览器才行)
一、微信SDK-分享URL
首先是为UNITY创建 微信的SDK 的JAVA插件,这个可以看我之前的文章-unity使用微信SDK实现微信分享以及反馈_个人工程记录 (好吧,我发现这个文章我没有发布在CSDN,而是在我的QQ空间内,实在不行就加我微信找我要把,或者我找时间重新写一遍,原来那篇有一些小错误)
然后在mainactivty 实现分享URL-我直接贴代码了,个人工程记录上有解释
public void shareURL(String Url,String titleString,String 网页描叙,String 图片名字){try{//初始化一个web对象,并输入urlUnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "开始分享URL");WXWebpageObject webmsg=new WXWebpageObject();webmsg.webpageUrl=Url;//用WXWebpageObject对象初始化一个WXMediaMessage填写标题,描叙WXMediaMessage msg=new WXMediaMessage(webmsg);msg.title=titleString;msg.description=网页描叙;//获得网页略缩图图片的BITMAP格式// int id = getResources().getIdentifier(图片名字, "drawable", getPackageName());// Bitmap bmp = BitmapFactory.decodeResource(getResources(),id);//从文件读取图片File mFile=new File(图片名字);Bitmap bmp=null;//若该文件存在if (mFile.exists()) {//UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "开始读取"+图片名字);bmp=BitmapFactory.decodeFile(图片名字);//UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "读取完毕"+图片名字);}else{UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", 图片名字+"读取出错");}//生成略缩图// UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "生成thumbBmp");Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 100, 100, true);//UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "生成msg.thumbData");msg.thumbData=Util.bmpToByteArray(thumbBmp, true);// UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "图像处理完毕");//生成微信的请求SendMessageToWX.Req req = new SendMessageToWX.Req();//设置它的校验格式req.transaction = buildTransaction("webpage");//设置它的内容req.message = msg;// UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "REQ设置完成,下面选择发送方法");//发给朋友req.scene =SendMessageToWX.Req.WXSceneSession;//使用通讯脚本的静态变量发送这个请求WXEntryActivity.api.sendReq(req);//UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "发送完成");}catch(Exception e){UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "抛出异常:"+e);}}
Unity上是这样的一个命令
string 邀请人用户名 = GameManager.s_GameManager.我的用户信息.用户昵称;string 房间号 = UI_GamrRoomState._最新的房间状态._房间信息.房间编号;jo.Call("shareURL", new object[] { "http://hmok38.vicp.net/jionroom.asp?roomID=" + 房间号,"速度来打牌!房间号:"+ 房间号, "您的好友 "+ 邀请人用户名+" 邀请您参加牌局!", 文件名 });
在微信上就是下图这样的。哈哈。点击它就会访问 “http://hmok38.vicp.net/jionroom.asp?roomID=房间号” 这个网址。然后网页会给出一个 超链接,
其指向 justlovepaohuzi://hmok/JoinRoom?roomID=房间号 。如果是在安卓上运行自然会启动我这个APP
二、Andriod APP 的URL启动并传参
设置unity 要附带的java插件,我直接在 微信SDK 的JAVA插件上添加需要的内容了。
1、首先是AndroidManifest.xml的设置
需要在MAIN <activity中添加内容
<activityandroid:name=".OverrideExample"android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> <intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><intent-filter><action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="justlovepaohuzi" android:host="hmok" android:pathPrefix="/JoinRoom"/></intent-filter></activity>
至于上面的scheme的设置
<data android:scheme="justlovepaohuzi" android:host="hmok" android:pathPrefix="/JoinRoom"/>
代表了这个APP可以由浏览器发送 justlovepaohuzi://hmok/JoinRoom?roomID=xxxx 的URL来启动这个APP,并且把XXXX传递进来。
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);储存打开APP的情况();}
private String ROOMID="";
private void 储存打开APP的情况(){try{Intent i_getvalue = getIntent(); String action = i_getvalue.getAction(); UnityPlayer.UnitySendMessage("PhotonClientManager", "getRoomID", "action:"+action);if(Intent.ACTION_VIEW.equals(action)){ Uri uri = i_getvalue.getData(); UnityPlayer.UnitySendMessage("PhotonClientManager", "getRoomID", "uri:"+uri);if(uri != null){ String roomID = uri.getQueryParameter("roomID"); UnityPlayer.UnitySendMessage("PhotonClientManager", "getRoomID", "roomID:"+roomID);ROOMID=roomID;} }}catch(Exception e){UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "储存打开APP抛出异常:"+e);}}//unity 获取ID的方法,因为我们不是一进入APP就要调取,所以在进入需要的场景的时候再调用,调用完毕后删除数值,这样保证下次进去的时候不会再次进入上一个房间public void GetGameRoomID(){try{UnityPlayer.UnitySendMessage("PhotonClientManager", "getRoomID", ROOMID);//清理IDROOMID="";}catch(Exception e){UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "储存打开APP抛出异常:"+e);}}
3、然后在unity中需要调用的时候调用它(下面方法是在UNITY中实现)
public void 请求邀请的房间编号(){AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");jo.Call("GetGameRoomID");UI_Note.s_UInote.Note("开始请求加入房间的编号");}//接收WXSDK中发过来的房间编号的方法public void getRoomID(string 房间编号){if(房间编号!=null&& 房间编号 != ""){UI_Note.s_UInote.Note("朋友邀请您进入:"+ 房间编号);//发送加入游戏房间的服务器请求PhotonOperationManager.s_PhotonOperationManager._JionGameRoom(房间编号);}else{// UI_Note.s_UInote.Note("没有房间编号" );}}
这样当unity需要邀请的房间ID时候,运行 请求邀请的房间编号(), WXSDK的JAVA工程发来了房间编号到 getRoomID方法中,如果有房间号就直接向服务器发送请求加入这个房间的编号。如果没有就啥都别做。
三、网页端的设计
用记事本新建个文件,名字叫 jionroom.asp 内容如下:
<html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>就爱跑胡子</title>
</head> <body>
<h1 style='font-size:60px;color:red' >提示:如果您使用微信打开本网页,请点击右上角,选择“在浏览器中打开”才可以哦!</h1><%
dim gameroomID
gameroomID=Request.QueryString("roomID")%>
<style type="text/css">
a.toolleft_03:link {color: #274579; font-size:50px;} /* 未访问的链接 */
a.toolleft_03:visited {color: #274579; font-size:50px;} /* 已访问的链接 */
a.toolleft_03:hover {color: #274579; font-size:50px;} /* 鼠标移动到链接上 */
a.toolleft_03:active {color: #274579; font-size:50px;} /* 选定的链接 */</style>
<a class=toolleft_03 href="justlovepaohuzi://hmok/JoinRoom?roomID=<%=gameroomID%>"> 启动就爱跑胡子,加入<%=gameroomID%>号房间!</a> </body> </html>
使用URL 启动unity Andriod APP并传递参数相关推荐
- Android: 启动另外的APP及传递参数(转)
转载自:http://blog.csdn.net/iefreer/article/details/8812585 有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等. 如果你不知道 ...
- android 中文参数,(原)Android: 启动另外的APP及传递参数
有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等. 如果你不知道那个APP的Activity,但是知道包名(package name),那么可以使用如下的方法: Intent L ...
- Android中一个APP启动另一个APP并传递参数
被调用(启动)的APP: 项目名字:Demo_ybs 项目包名:com.ybs.demo_ybs 被调用APP中获取调用者的传递数据: package com.ybs.demo_ybs;import ...
- Android通过浏览器打开App并传递参数
Android通过浏览器打开App并传递参数; Data的Uri的规则: scheme://host:port/path or pathPrefix or pathPattern 打开App传递参数U ...
- Android:H5、web调起App并且传递参数
1.在清单文件的Activity声明里添加: <intent-filter><action android:name="android.intent.action.VIEW ...
- ionic开发——打开百度地图APP如何传递参数,导航路线
首先,打开百度地图APP的方法不知道朋友可以看一下这里: <ionic开发--检测是否安装某APP,如果安装打开该APP>http://blog.csdn.net/yu1731013344 ...
- c#中一个进程启动另一个进程并传递参数
1.开启进程 using System.Diagnostics; ProcessStartInfo process = new ProcessStartInfo(); process.FileNa ...
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数...
点击浏览器中的URL链接,启动特定的App. 首先做成HTML的页面,页面内容格式如下: <a href="[scheme]://[host]/[path]?[query]" ...
- 从URL启动程序:也谈谈旺旺的页面启动--转载
一.引子 很多时候为了方便,我们都需要从页面上启动一些本地的程序,比如QQ,MSN,Skype等. 我们先拿QQ来举例,QQ提供了一个QQ在线状态的服务,QQ在线状态服务 我们可以将自己的" ...
最新文章
- 圣诞节!教你用Python画棵圣诞树
- oracle 10g安装
- PHP中用编码代码,编码对照表的使用(2)_php
- SpringBoot 中发布ApplicationEventPublisher,监听ApplicationEvent 异步操作
- Caffe学习系列(5):其它常用层及参数
- AndroidStudio离线使用gradle
- SpringMVC的请求-获得请求参数-静态资源访问的开启
- c语言 艺术编程,C语言编程艺术--条件编译(原创)
- 面试题56: 数组中数字出现的次数
- 喜欢←划,不喜欢→划
- Java多线程11:ReentrantLock的使用和Condition
- eclipse 恢复默认窗口
- 什么叫做展望_开学季:有一种爱, 叫做爸妈给你塞的行李箱!(附大学新生行李箱应怎么选?)...
- 设计模式笔录(一),什么是设计模式
- python hello world程序编写_自动编写Python程序的神器,Python 之父都发声力挺
- 深度学习入门极简教程(一)
- 超强换元法,二重积分计算的利器(雅可比行列式超通俗讲解)
- kmz转换为dwg_徐州网站设计_seo优化常用技巧:什么软件可以将PDF文件转换为DWG文件...
- w ndows默认截图工具,windows截图工具快捷键
- Groovy - Groovy ambiguous method overload