Unity之调用AndroidWebView
如题,本文将介绍关于如何制作unity插件,并通过unity调用Android中的程序,并打开Webview访问网页。本文参考雨松momo的文章http://www.xuanyusong.com/archives/1418,在此表示感谢。
开发环境:win7,Unity,Eclipse
手机:me525+
首先,我们在Eclipse中新建一个工程OpenWebView,会默认生成一个MainActivity.java。在写程序之前我们要去你安装Unity程序的目录下Unity->Editor->Data->PlaybackEngines->androidplayer->bin->classes.jar ,将这个classes.jar文件拷贝出来,先放在桌面上,然后打开Eclipse将我们刚刚找到的classes.jar文件放在工程的libs文件下面。
好了,现在可以开始编程了.
在MainActivity.java文件中
package com.cheng.jack;import com.unity3d.player.UnityPlayerActivity;import android.content.Context;import android.content.Intent;import android.os.Bundle;public class MainActivity extends UnityPlayerActivity { private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; } //这个函数将是我们通过unity调用的函数 public void OpenWeb(){ //这里是直接跳转到M_Webview这个Activity中 Intent intent = new Intent(); intent.setClass(mContext, M_Webview.class); mContext.startActivity(intent); }}
接下来我们再在Eclipse中新建一个Class,命名为M_Webview(这个名字自己)
M_Webview的代码如下:
package com.cheng.jack;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;public class M_Webview extends Activity { private WebView mView; private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); //获得我们的WebView和Button mView = (WebView)findViewById(R.id.webview); mButton = (Button)findViewById(R.id.btn); //将WebView的初始状态设为百度网页 mView.loadUrl("http://www.baidu.com"); mView.getSettings().setJavaScriptEnabled(true); mView.setWebViewClient(new WebviewClient()); //设置button的监听事件,当button按下时,我们关闭Activity mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub M_Webview.this.finish(); } }); } //这个就是实现在程序中打开一个新的连接,还停留在这个程序中 private class WebviewClient extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return super.shouldOverrideUrlLoading(view, url); } }}
然后就是我们的配置文件,配置文件其实没什么,里面就是一个Webview和一个Button
AndroidManifest.xml这个文件是个重要的文件,里面有几个配置是必须的,我们后来新建了一个Activity,所以必须要在这里体现出来,然后我们要人我们的程序必须有联网权限,代码如下:
<?xml version="1.0" encoding="utf-8"?>
现在我们在Eclipse这边的代码部分基本上都完成了,接下来我们要将我们的程序都打包成jar文件(这个将在我们的unity中将会用到,这就是我们说的所谓的插件)。我们运行windows下面的终端,从终端进入我们的OpenWebView工程,进入OpenWebView->bin->classes文件夹下,我们执行命令:
jar -cvf class.jar * 然后在classes文件夹下面将会生成一个class.jar文件,我们先将它拷贝到桌面上,除了这个文件我们还要拷贝两个文件,一个是工程下面的AndroidManifest.xml文件和res文件,好了Eclipse这边算是完成了,我们现在确保桌面上有三个文件,class.jar ,res,AndroidManifest.xml。
现在我们来到unity下面,在写程序之前,我们要做些准备工作。首先,新建一个Unity工程,在工程的Assets文件夹下面新建一个文件夹,名字必须是Publigs,然后在Publigs文件夹下面新建一个Android文件夹。ok,现在我们将我们放在桌面上的三个文件放到Android文件夹下面。准备工作做好了。接下来就是编程写代码了。我们新建一个c#文件,名字叫做OpenWebview
using UnityEngine;using System.Collections;public class OpenWebView : MonoBehaviour { void OnGUI(){ if(GUI.Button(new Rect(100,100,100,30),"OpenWebView")){ AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic("currentActivity"); jo.Call("OpenWeb"); } }}
在这里要说明几点啊,jo.call("OpenWeb");这个就是调用我们的Android程序了,在我们编译运行之前我们要配置我们的Unity,第一点Bundle Identifier这个必须要和我们的Android的包名称相同,我这里是com.cheng.jack ,第二点unity设置中的最低版本和Android设置中的最低版本要相同(这点让我纠结了好长时间)。
然后运行就ok了,这里上两张效果图。
最后附上工程地址:
http://down.51cto.com/data/861687
更多相关文章
- Android(安卓)NDK 异常 Error:No toolchains found in the NDK t
- Android-ListView中嵌套(ListView)控件时item的点击事件不起作用
- Uni-app Android(安卓)离线打包集成 uni-push(个推)消息推送
- Dex2Oat源码流程(1)——Android6.0
- 关于android的设备管理器-DevicePolicyManager(二)
- Android学习备忘021——FBReader源码修改package name
- React Native获取移动设备信息(react-native-device-info)如何使
- android在线预览office
- Android(安卓)开发最佳实践--转自Git