Unity中在Android平台下打开Web网页

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文件和启动类都会重置,不过网上也有解决办法,请自行查看,最后奉上我的效果:
启动效果如下:

在这里插入图片描述

点击后效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值