From bf91971f45348d74b17a2077cf5fab92a553840b Mon Sep 17 00:00:00 2001 From: lwb <q3213421wrwqr> Date: 星期一, 07 十二月 2020 17:28:20 +0800 Subject: [PATCH] 9527 webview --- SdkProject/library/src/main/java/com/secondworld/sdk/UnityPlayerActivity.java | 4 SdkProject/library/src/main/res/drawable-xhdpi/web_close.png | 0 Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar | 0 Channel/Android/gtgame/release/libs/library-release-gtgame.aar | 0 SdkProject/library/src/main/java/com/secondworld/sdk/utils/WebViewUtil.java | 101 +++++++++++++++++++++++++++++++++ Channel/Android/test/release/libs/library-release-test.aar | 0 SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdOpenWebView.java | 13 +++- Channel/Android/test/debug/libs/library-debug-test.aar | 0 SdkProject/library/src/main/res/layout/activity_main.xml | 28 ++++++++ SdkProject/library/src/main/java/com/secondworld/sdk/GameActivity.java | 16 ++++ 10 files changed, 153 insertions(+), 9 deletions(-) diff --git a/Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar b/Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar index 0ac56df..5ed38c1 100644 --- a/Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar +++ b/Channel/Android/gtgame/debug/libs/library-debug-gtgame.aar Binary files differ diff --git a/Channel/Android/gtgame/release/libs/library-release-gtgame.aar b/Channel/Android/gtgame/release/libs/library-release-gtgame.aar index 8c543fe..dfa5e79 100644 --- a/Channel/Android/gtgame/release/libs/library-release-gtgame.aar +++ b/Channel/Android/gtgame/release/libs/library-release-gtgame.aar Binary files differ diff --git a/Channel/Android/test/debug/libs/library-debug-test.aar b/Channel/Android/test/debug/libs/library-debug-test.aar index 0c1c53e..2da36d1 100644 --- a/Channel/Android/test/debug/libs/library-debug-test.aar +++ b/Channel/Android/test/debug/libs/library-debug-test.aar Binary files differ diff --git a/Channel/Android/test/release/libs/library-release-test.aar b/Channel/Android/test/release/libs/library-release-test.aar index a730e52..b546065 100644 --- a/Channel/Android/test/release/libs/library-release-test.aar +++ b/Channel/Android/test/release/libs/library-release-test.aar Binary files differ diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/GameActivity.java b/SdkProject/library/src/main/java/com/secondworld/sdk/GameActivity.java index 1bc106d..c9b34b3 100644 --- a/SdkProject/library/src/main/java/com/secondworld/sdk/GameActivity.java +++ b/SdkProject/library/src/main/java/com/secondworld/sdk/GameActivity.java @@ -2,14 +2,20 @@ import android.os.Bundle; import android.support.annotation.NonNull; +import android.widget.FrameLayout; +import android.widget.RelativeLayout; import com.secondworld.sdk.utils.LogUtil; +import com.secondworld.sdk.utils.WebViewUtil; public class GameActivity extends UnityPlayerActivity { private static Class<? extends GameActivityProxy> proxyClass; - GameActivityProxy proxy; + private GameActivityProxy proxy; + + private RelativeLayout webContainer; + private FrameLayout unityContainer; //娉ㄥ唽浠g悊绫� public static void registerProxy(Class<? extends GameActivityProxy> proxyClass) { @@ -19,7 +25,13 @@ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - LogUtil.d("GameActivity","鍚姩鐨勬槸GameActivity锛�"); + LogUtil.d("GameActivity", "鍚姩鐨勬槸GameActivity锛�"); + setContentView(R.layout.activity_main); + webContainer = findViewById(R.id.webContainer); + unityContainer = findViewById(R.id.unityContainer); + unityContainer.addView(mUnityPlayer); + WebViewUtil.I.init(this, webContainer); + //鍒濆鍖栨笭閬撲唬鐞嗙被 try { if (proxyClass != null) { proxy = proxyClass.newInstance(); diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/UnityPlayerActivity.java b/SdkProject/library/src/main/java/com/secondworld/sdk/UnityPlayerActivity.java index e438f13..bee6ee2 100644 --- a/SdkProject/library/src/main/java/com/secondworld/sdk/UnityPlayerActivity.java +++ b/SdkProject/library/src/main/java/com/secondworld/sdk/UnityPlayerActivity.java @@ -39,8 +39,8 @@ getIntent().putExtra("unity", cmdLine); mUnityPlayer = new UnityPlayer(this, this); - setContentView(mUnityPlayer); - mUnityPlayer.requestFocus(); +// setContentView(mUnityPlayer); +// mUnityPlayer.requestFocus(); } // When Unity player unloaded move task to background diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdOpenWebView.java b/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdOpenWebView.java index 78ca40d..0d6d869 100644 --- a/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdOpenWebView.java +++ b/SdkProject/library/src/main/java/com/secondworld/sdk/command/CmdOpenWebView.java @@ -1,17 +1,24 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; +import com.secondworld.sdk.utils.WebViewUtil; +import org.json.JSONException; import org.json.JSONObject; -public class CmdOpenWebView implements ICommand { +public class CmdOpenWebView implements ICommand { @Override public int getCode() { return CodeU2A.OpenWebView; } @Override - public void process(JSONObject json) { - + public void process(JSONObject json) throws JSONException { + String url = json.getString("url"); + if (json.has("delay")) { + boolean delay = json.getBoolean("delay"); + WebViewUtil.I.open(url, delay); + } else + WebViewUtil.I.open(url, true); } } diff --git a/SdkProject/library/src/main/java/com/secondworld/sdk/utils/WebViewUtil.java b/SdkProject/library/src/main/java/com/secondworld/sdk/utils/WebViewUtil.java new file mode 100644 index 0000000..0f73f33 --- /dev/null +++ b/SdkProject/library/src/main/java/com/secondworld/sdk/utils/WebViewUtil.java @@ -0,0 +1,101 @@ +package com.secondworld.sdk.utils; + +import android.annotation.SuppressLint; +import android.util.DisplayMetrics; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.RelativeLayout; + +import com.secondworld.sdk.GameActivity; +import com.secondworld.sdk.R; + +public class WebViewUtil { + + public static WebViewUtil I; + + RelativeLayout webContainer; + private WebView webView; + private WebView btnClose; + + private boolean isShow; + + private boolean isValid() { + return webContainer != null && btnClose != null && webView != null; + } + + @SuppressLint("SetJavaScriptEnabled") + public void init(GameActivity gameActivity, RelativeLayout webContainer) { + this.webContainer = webContainer; + webView = webContainer.findViewById(R.id.webView); + btnClose = webContainer.findViewById(R.id.btnWebClose); + btnClose.setOnClickListener(v -> close()); + close(); + //璁剧疆澶у皬 + DisplayMetrics _dm = new DisplayMetrics(); + gameActivity.getWindowManager().getDefaultDisplay().getMetrics(_dm); + final float scale = _dm.widthPixels * 1f / 1344; + final int width = (int) (scale * 982); + final int height = (int) (scale * 560); + ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams( + webView.getLayoutParams()); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( + margin); + layoutParams.width = width; + layoutParams.height = height; + layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, + RelativeLayout.TRUE); + webView.setLayoutParams(layoutParams); + webView.getSettings().setJavaScriptEnabled(true); + webView.setWebViewClient(new WebViewClient() { + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + if (isShow) + show(); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (url.startsWith("http") || url.startsWith("https")) { //http鍜宧ttps鍗忚寮�澶寸殑鎵ц姝e父鐨勬祦绋� + view.loadUrl(url); + return true; + } else { //鍏朵粬鐨刄RL鍒欎細寮�鍚竴涓狝citity鐒跺悗鍘昏皟鐢ㄥ師鐢烝PP + return super.shouldOverrideUrlLoading(view, url); + } + } + }); + } + + /** + * 鎵撳紑缃戦〉 + * + * @param url 鍦板潃 + * @param delay 鏄惁寤惰繜鏄剧ず锛堝姞杞藉畬鎴愭墠鏄剧ず锛� + */ + public void open(String url, boolean delay) { + if (!isValid()) + return; + webView.loadUrl(url); + if (!delay) + show(); + } + + private void show() { + isShow = true; + webContainer.setVisibility(View.VISIBLE); + } + + public void close() { + if (!isValid()) + return; + webView.clearFocus(); + webView.clearCache(true); + webView.clearHistory(); + webView.clearFormData(); + isShow = false; + webContainer.setVisibility(View.GONE); + } + +} diff --git a/SdkProject/library/src/main/res/drawable-xhdpi/web_close.png b/SdkProject/library/src/main/res/drawable-xhdpi/web_close.png new file mode 100644 index 0000000..393cf17 --- /dev/null +++ b/SdkProject/library/src/main/res/drawable-xhdpi/web_close.png Binary files differ diff --git a/SdkProject/library/src/main/res/layout/activity_main.xml b/SdkProject/library/src/main/res/layout/activity_main.xml index 7b97e2b..ed0ebdb 100644 --- a/SdkProject/library/src/main/res/layout/activity_main.xml +++ b/SdkProject/library/src/main/res/layout/activity_main.xml @@ -5,8 +5,32 @@ android:layout_height="match_parent"> <FrameLayout - android:id="@+id/unity_view" + android:id="@+id/unityContainer" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:layout_centerInParent="true" /> + + <RelativeLayout + android:id="@+id/webContainer" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_centerInParent="true"> + + <WebView + android:id="@+id/webView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerInParent="true" /> + + <ImageButton + android:id="@+id/btnWebClose" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignEnd="@id/webView" + android:layout_alignTop="@id/webView" + android:background="@drawable/web_close" /> + + </RelativeLayout> + </RelativeLayout> \ No newline at end of file -- Gitblit v1.8.0