如题,本文将介绍关于如何制作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
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭网页"/>
</LinearLayout>
AndroidManifest.xml这个文件是个重要的文件,里面有几个配置是必须的,我们后来新建了一个Activity,所以必须要在这里体现出来,然后我们要人我们的程序必须有联网权限,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cheng.jack"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.cheng.jack.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 这里是我们新添加的Activity -->
<activity android:name="com.cheng.jack.M_Webview"
></activity>
</application>
<!--这里就是添加联网权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
现在我们在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<AndroidJavaObject>("currentActivity");
jo.Call("OpenWeb");
}
}
}
在这里要说明几点啊,jo.call("OpenWeb");这个就是调用我们的Android程序了,在我们编译运行之前我们要配置我们的Unity,第一点Bundle Identifier这个必须要和我们的Android的包名称相同,我这里是com.cheng.jack ,第二点unity设置中的最低版本和Android设置中的最低版本要相同(这点让我纠结了好长时间)。
然后运行就ok了,这里上两张效果图。
最后附上工程地址:
http://down.51cto.com/data/861687
转载于:https://blog.51cto.com/jackcheng/1242240