一、WebView簡介
????????WebView是Android中的原生UI控件,主要用于在app應(yīng)用中方便地訪問遠(yuǎn)程網(wǎng)頁或本地html資源。同時(shí),WebView也在Android中充當(dāng)Java代碼和JS代碼之間交互的橋梁。實(shí)際上,也可以將WebView看做一個(gè)功能最小化的瀏覽器。
????????安卓官方WebView接口文檔
二、安卓交互功能封裝
????????通過Android Studio將WebView相關(guān)調(diào)用接口封裝成AAR包,以供后續(xù)Unity調(diào)用。
1、新建安卓工程
(1)創(chuàng)建工程
????????使用Android Studio創(chuàng)建新工程,選擇為Empty Activity。
(2)選項(xiàng)配置
????????設(shè)置一下Name及Package name,注意一下Language是否選擇Java。
?2、創(chuàng)建模塊
????????創(chuàng)建用于封裝AAR包的模塊。選中工程名,右鍵New-->Module。例如本項(xiàng)目創(chuàng)建名為WebView的模塊。
????????注意,模塊包名要與工程的包名一致。
?3、Java類創(chuàng)建
(1)創(chuàng)建方法調(diào)用類
????????選中WebView模塊-->src-->main-->java-->包名(com.xx.xx),右鍵New-->Java Class,創(chuàng)建名為MainActivity的方法調(diào)用Java類,內(nèi)部寫好供Unity調(diào)用的方法。寫入以下代碼。
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MainActivity extends Activity{
private Context mContext;
private static MainActivity mMainActivity = null;
public MainActivity(Context context) {
this.mContext = context;
}
public static MainActivity getInstance(Context context){
if (mMainActivity == null) {
mMainActivity = new MainActivity(context);
}
return mMainActivity;
}
//Unity中會(huì)調(diào)用這個(gè)方法,從而開打WebView
public void StartWebView(String url,String label)
{
printLog("Welcome");
WebViewActivity.openUrl = url;
WebViewActivity.activityLabel = label;
Intent intent = new Intent(this.mContext,WebViewActivity.class);
this.mContext.startActivity(intent);
}
public boolean showToast(String content){
Toast.makeText(this.mContext,content,Toast.LENGTH_SHORT).show();
return true;
}
private void printLog(String s){
//Log.d("vivian",s);
showToast(s);
}
}
(2)創(chuàng)建WebView調(diào)用類
????????同樣的方式,在MainActivity同級(jí)目錄里創(chuàng)建名為WebViewActivity的WebView調(diào)用類,用于開啟WebView。寫入以下代碼。
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
public class WebViewActivity extends Activity {
public static String openUrl;//需要打開的鏈接
public static String activityLabel;//鏈接對(duì)應(yīng)的Title,顯示在WebView的標(biāo)題欄
private WebView webView;
private Button close;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(activityLabel);//設(shè)置鏈接的Title
setContentView(R.layout.activity_webview);
webView = (WebView) findViewById(R.id.WebView);
webView.loadUrl(openUrl);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
close = (Button) findViewById(R.id.CloseButton);
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) {
WebView.HitTestResult hit = view.getHitTestResult();
//hit.getExtra()為null或者h(yuǎn)it.getType() == 0都表示即將加載的URL會(huì)發(fā)生重定向,需要做攔截處理
if (TextUtils.isEmpty(hit.getExtra()) || hit.getType() == 0) {
//通過判斷開頭協(xié)議就可解決大部分重定向問題了,有另外的需求可以在此判斷下操作
Log.e("重定向", "重定向: " + hit.getType() + " && EXTRA()" + hit.getExtra() + "------");
Log.e("重定向", "GetURL: " + view.getUrl() + "\n" +"getOriginalUrl()"+ view.getOriginalUrl());
Log.d("重定向", "URL: " + url);
}
if (url.startsWith("http://") || url.startsWith("https://")) {//加載的url是http/https協(xié)議地址
view.loadUrl(url);
return false; //返回false表示此url默認(rèn)由系統(tǒng)處理,url未加載完成,會(huì)繼續(xù)往下走
} else { //加載的url是自定義協(xié)議地址
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}
}
}
4、AndroidManifest.xml文件配置
????????在AndroidManifest.xml文件里配置創(chuàng)建的Java類及權(quán)限。
????????模塊創(chuàng)建后默認(rèn)寫入了一些內(nèi)容,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>
????????在WebView模塊-->src-->main下打開AndroidManifest.xml,寫入以下內(nèi)容:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="包名">
<application
android:usesCleartextTraffic="true">
<activity android:name=".MainActivity">
</activity>
<activity android:name=".WebViewActivity"
android:label="@string/activity_name">
</activity>
</application>
<!-- 連接互聯(lián)網(wǎng)的權(quán)限 -->
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
5、創(chuàng)建res文件夾
????????選中WebView模塊-->src-->main,右鍵New-->Directory,在彈窗里選擇res,雙擊創(chuàng)建。
?
????????res文件夾后續(xù)用來存儲(chǔ)布局文件及一些字符串配置文件。
????????創(chuàng)建后的目錄層級(jí)如下:
?6、創(chuàng)建WebView布局文件
????????布局文件用于WebView界面布局設(shè)計(jì)。選中res文件夾,右鍵New-->Directory,在彈窗里輸入layout,回車創(chuàng)建。
????????創(chuàng)建完畢后,選中l(wèi)ayout,右鍵New-->Layout Resource File,在彈窗里輸入activity_webview(名字根據(jù)自己的上下文自定義),點(diǎn)擊OK創(chuàng)建布局文件。
????????將界面選擇為Code后,寫入以下內(nèi)容:
?
<?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/CloseButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="#009688"
android:text="返回"
android:textColor="#FFFFFF"
android:textColorHint="#000000" />
</LinearLayout>
7、創(chuàng)建strings.xml文件
?????????選中res文件夾,右鍵New-->Directory,在彈窗里輸入values,回車創(chuàng)建。
?????????創(chuàng)建完畢后,選中values,右鍵New-->File,在彈窗里輸入strings.xml后,回車創(chuàng)建。
?????????創(chuàng)建完畢,打開strings.xml文件,寫入以下內(nèi)容:
<resources>
<string name="activity_name">B站</string>
</resources>
????????strings.xml文件用于設(shè)置WebView界面的標(biāo)題,在WebViewActivity中動(dòng)態(tài)修改其值。
8、修改編譯和目標(biāo)SDK
????????在WebView模塊中,找到并打開build.gradle文件,將compileSdk和targetSdk修改為31或以上。
?????????因?yàn)楹罄m(xù)構(gòu)建release版本AAR包時(shí),需要31或以上版本的SDK。
9、修改Build變量為release
????????點(diǎn)擊Build-->Select Build Variant...,在打開的界面中將WebView模塊的Build Variant選擇為release。
?10、針對(duì)AAR包混淆處理
(1)build.gradle修改
????????在WebView模塊中,找到并打開build.gradle文件,將buildTypes中release塊的minifyEnabled修改為true。
?(2)混淆文件修改
????????在WebView模塊中,找到并打開proguard-rules.pro文件,寫入以下內(nèi)容:
-keep class 包名.MainActivity{public <methods>;}
????????此處是為了保持MainActivity中的public方法不被混淆處理,避免供Unity調(diào)用的方法混淆。若不加以限制,Unity將無法調(diào)用到AAR包里的方法。
11、構(gòu)建AAR包
????????選中WebView模塊,點(diǎn)擊Build-->Make Module,或者直接Build-->Rebuild Project。
????????待編譯完成后,在WebView模塊-->build-->outputs-->aar里便可找到編譯好的AAR包。
?三、Unity調(diào)用
1、AAR包放置
????????直接將AAR包拖放至Unity的Assets-->Plugins-->Android路徑下。
?2、創(chuàng)建C#腳本,調(diào)用AAR包
????????寫入以下內(nèi)容,用來調(diào)用AAR包里的函數(shù)接口。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SetWebViewUtils : MonoBehaviour
{
private AndroidJavaObject setWebViewUtils;
private string activityLabel;//安卓端Activity的Label,即打開的鏈接在WebView中的標(biāo)題
// Start is called before the first frame update
void Start()
{
AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass openAppUtilsClass = new AndroidJavaClass("包名.MainActivity");
setWebViewUtils = openAppUtilsClass.CallStatic<AndroidJavaObject>("getInstance", currentActivity);
}
//設(shè)置WebView的標(biāo)題
public void SetTitle(string label)
{
activityLabel = label;
}
//打開WebView
public void SetWebView(string url)
{
setWebViewUtils.Call("StartWebView", url, activityLabel);
}
}
3、調(diào)用測(cè)試
????????在Unity編輯器里創(chuàng)建三個(gè)按鈕,用來打開三個(gè)不同的鏈接。
????????將SetWebViewUtils腳本掛載至場(chǎng)景物體上。
????????三個(gè)按鈕的調(diào)用方式如下,通過傳入標(biāo)題名稱及需要打開的鏈接地址來打開相應(yīng)的WebView。
?4、切換至安卓平臺(tái),打包apk,安裝測(cè)試便可
四、AAR包資源下載入口
? ? ? ? 如果有小伙伴看了以上教程還不知道如何封包,可以直接下載以下AAR包直接使用,里面有插件的包名,替換掉SetWebViewUtils腳本里的“包名”便可。文章來源:http://www.zghlxwxcb.cn/news/detail-698842.html
????????AAR包下載入口文章來源地址http://www.zghlxwxcb.cn/news/detail-698842.html
到了這里,關(guān)于安卓WebView的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!