Unity中在Android平台下打开Web网页
程序员文章站
2022-03-15 13:08:30
Unity中再andoird平台下打开web网页有个插件叫UiWebView可以实现,然而我们也自己手动实现,我参照了一些网上的博客,网上的大部分的做法是把这个功能在android下做好后作为一个jar导入到Unity中进行使用,我的做法刚好是反向的,本文的许多代码参照https://www.xuanyusong.com/archives/1418,而整个流程是恰恰相反的。首先新建一个工程,然后创建一个button,然后给button创建一个点击事件......
Unity中再andoird平台下打开web网页有个插件叫UiWebView可以实现,然而我们也自己手动实现,我参照了一些网上的博客,网上的大部分的做法是把这个功能在android下做好后作为一个jar导入到Unity中进行使用,而我们整个流程是恰恰相反的,我们先导出一个android工程后,再在android studio中打包。本文的许多代码参照https://www.xuanyusong.com/archives/1418,感谢大佬写下的代码,让我可以借鉴。
首先新建一个工程,然后创建一个button,然后给button创建一个点击事件
public class Test : MonoBehaviour
{
public Button btn;
// Start is called before the first frame update
void Start()
{
AndroidJavaClass aj= new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject p= aj.GetStatic<AndroidJavaObject>("currentActivity");
btn.onClick.AddListener(() =>
{
Debug.Log("按钮点击");
p.Call("openWebView");
});
}
}
其实就是点击按钮然后调用android的方法,然后打开web页面。然后直接导出一个android工程。具体打包或者导出android工程设置不在赘述,不懂的朋友多去查阅。
之后我们便需要在android中开始操作了,首先创建类WebViewActivity的页面,内容代码如下
package com.unity3d.player;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
public class WebViewActivity extends Activity{
private WebView webView;
private Button close;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("http://www.baidu.com/");
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
close = (Button) findViewById(R.id.button);
close.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
WebViewActivity.this.finish();
}
});
}
private class WebViewClient extends android.webkit.WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//这里实现的目标是在网页中继续点开一个新链接,还是停留在当前程序中
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
}
}
然后创建xml页面布局main.xml,这个文件的位置要在res/layout下,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"
/>
<Button
android:id="@+id/button"
android:text="关闭网页"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
我们还需要在AndroidManifest中配置一下
<activity android:name=".WebViewActivity">
<!-- 连接互联网的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
有网络权限的无须在配置,最后我们就可以在启动类UnityPlayerActivity中使用了,
代码如下
import android.content.Context;
public class UnityPlayerActivity extends Activity implements IUnityPlayerLifecycleEvents{
protected UnityPlayer mUnityPlayer;
Context mContext = null;
@Override protected void onCreate(Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
mContext = this;
String cmdLine = updateUnityCommandLineArguments(getIntent().getStringExtra("unity"));
getIntent().putExtra("unity", cmdLine);
mUnityPlayer = new UnityPlayer(this, this);
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();
}
//打开页面在unity中需要调用的方法
public void openWebView(){
Intent intent = new Intent(mContext,WebViewActivity.class);
this.startActivity(intent);
}
....剩余代码部分没变省略
}
最后我们可以在android sutio中build一个apk看下效果,还有一点需要注意的是每次重新导出android工程后manifest文件和启动类都会重置,不过网上也有解决办法,请自行查看,最后奉上我的效果:
启动效果如下:
点击后效果如下:
本文地址:https://blog.csdn.net/qq_34772097/article/details/110656803