Parcourir la source

1.压缩图片

王鹏鹏 il y a 2 ans
Parent
commit
967ffc749b

+ 1 - 0
.idea/misc.xml

@@ -4,6 +4,7 @@
     <option name="filePathToZoomLevelMap">
       <map>
         <entry key="..\:/workspace/hcp-pad/webview/src/main/res/layout/activity_bridge_web.xml" value="0.22826086956521738" />
+        <entry key="..\:/workspace/hcp-pad/webview/src/main/res/layout/activity_webview.xml" value="0.22826086956521738" />
         <entry key="..\:/workspace/yingyangfly/app/src/main/res/layout/activity_main.xml" value="0.22826086956521738" />
         <entry key="..\:/workspace/yingyangfly/app/src/main/res/layout/activity_push.xml" value="0.22239583333333332" />
         <entry key="..\:/workspace/yingyangfly/baselib/src/main/res/drawable/bg_center_toast.xml" value="0.2265" />

+ 2 - 1
app/src/main/AndroidManifest.xml

@@ -4,7 +4,8 @@
     package="com.yingyangfly"
     android:installLocation="internalOnly">
     <!--    android:sharedUserId="android.uid.system"-->
-
+    <permission android:name="${applicationId}.permission.JOPERATE_MESSAGE" android:protectionLevel="signature"/>
+    <uses-permission android:name="${applicationId}.permission.JOPERATE_MESSAGE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

+ 6 - 0
baselib/src/main/java/com/yingyangfly/baselib/utils/JumpUtil.kt

@@ -11,6 +11,12 @@ object JumpUtil {
             .navigation()
     }
 
+    fun jumpActivityWithUrl(path: String, url: String) {
+        ARouter.getInstance().build(path)
+            .withString("url", url)
+            .navigation()
+    }
+
     fun jumpActivityWithString(path: String, string: Map.Entry<String, String>) {
         ARouter.getInstance().build(path)
             .withString(string.key, string.value)

+ 116 - 0
webview/src/main/assets/demo.html

@@ -0,0 +1,116 @@
+<html>
+<head>
+    <meta content="text/html; charset=utf-8" http-equiv="content-type">
+    <title>
+        js调用java
+    </title>
+</head>
+
+<body>
+<p>
+    <xmp id="show">
+    </xmp>
+</p>
+<p>
+    <xmp id="init">
+    </xmp>
+</p>
+<p>
+    <input type="text" id="text1" value="用户名(username)"/>
+</p>
+<p>
+    <input type="text" id="text2" value="password"/>
+</p>
+<p>
+    <input type="button" id="enter" value="发消息给Native" onclick="testClick();"
+    />
+</p>
+<p>
+    <input type="button" id="enter1" value="调用Native方法" onclick="testClick1();"
+    />
+</p>
+<p>
+    <input type="button" id="enter2" value="显示html" onclick="testDiv();"/>
+</p>
+<p>
+    <input type="file" value="打开文件"/>
+</p>
+</body>
+<script>
+        function testDiv() {
+            document.getElementById("show").innerHTML = document.getElementsByTagName("html")[0].innerHTML;
+        }
+
+        function testClick() {
+            var str1 = document.getElementById("text1").value;
+            var str2 = document.getElementById("text2").value;
+
+            //send message to native
+            var data = {id: 1, content: "这是一个图片 <img src=\"a.png\"/> test\r\nhahaha"};
+            WebViewJavascriptBridge.doSend(
+                data
+                , function(responseData) {
+                    document.getElementById("show").innerHTML = "repsonseData from java, data = " + responseData
+                }
+            );
+
+        }
+
+        function testClick1() {
+            var str1 = document.getElementById("text1").value;
+            var str2 = document.getElementById("text2").value;
+
+            //call native method
+            window.WebViewJavascriptBridge.callHandler(
+                'submitFromWeb'
+                , {'param': '中文测试'}
+                , function(responseData) {
+                    document.getElementById("show").innerHTML = "send get responseData from java, data = " + responseData
+                }
+            );
+        }
+
+        function bridgeLog(logContent) {
+            document.getElementById("show").innerHTML = logContent;
+        }
+
+        function connectWebViewJavascriptBridge(callback) {
+            if (window.WebViewJavascriptBridge && WebViewJavascriptBridge.inited) {
+                callback(WebViewJavascriptBridge)
+            } else {
+                document.addEventListener(
+                    'WebViewJavascriptBridgeReady'
+                    , function() {
+                        callback(WebViewJavascriptBridge)
+                    },
+                    false
+                );
+            }
+        }
+
+        connectWebViewJavascriptBridge(function(bridge) {
+            bridge.init(function(message, responseCallback) {
+                console.log('JS got a message', message);
+                var data = {
+                    'Javascript Responds': '测试中文!'
+                };
+
+                if (responseCallback) {
+                    console.log('JS responding with', data);
+                    responseCallback(data);
+                }
+            });
+
+            bridge.registerHandler("functionInJs", function(data, responseCallback) {
+                document.getElementById("show").innerHTML = ("data from Java: = " + data + Date.now());
+                if (responseCallback) {
+                    var responseData = "Javascript Says Right back aka!";
+                    responseCallback(responseData);
+                }
+            });
+        })
+
+</script>
+
+</html>
+

+ 3 - 1
webview/src/main/java/com/yingyangfly/webview/AndroidToJs.kt

@@ -1,6 +1,7 @@
 package com.yingyangfly.webview
 
 import android.app.Activity
+import android.util.Log
 import android.webkit.JavascriptInterface
 import com.yingyangfly.baselib.ext.logi
 
@@ -14,7 +15,8 @@ class AndroidToJs(val context: Activity) : Any() {
     // 定义JS需要调用的方法
     // 被JS调用的方法必须加入@JavascriptInterface注解
     @JavascriptInterface
-    fun postMessage(msg: String?) {
+    fun callbackHandle(msg: String?) {
+        Log.e("wpp", "------------------------------777")
         "js回调给原生的参数:$msg".logi()
 //        if (msg?.contains("403") == true) {
 //

+ 25 - 20
webview/src/main/java/com/yingyangfly/webview/BridgeWebActivity.kt

@@ -2,13 +2,12 @@ package com.yingyangfly.webview
 
 import android.annotation.SuppressLint
 import android.content.pm.ActivityInfo
-import android.graphics.Bitmap
 import android.os.Build
-import android.webkit.WebResourceRequest
-import android.webkit.WebSettings
-import android.webkit.WebView
-import android.webkit.WebViewClient
+import android.util.Log
+import android.webkit.*
 import com.alibaba.android.arouter.facade.annotation.Route
+import com.github.lzyzsd.jsbridge.BridgeHandler
+import com.github.lzyzsd.jsbridge.CallBackFunction
 import com.yingyangfly.baselib.base.BaseActivity
 import com.yingyangfly.baselib.ext.toast
 import com.yingyangfly.baselib.router.RouterUrlCommon
@@ -24,7 +23,7 @@ class BridgeWebActivity : BaseActivity<ActivityBridgeWebBinding>() {
     var url: String = ""
 
     override fun initViews() {
-        url = "http://60.205.201.7/cocos/mobile/whacaMole/"
+        url = "http://60.205.201.7/cocos/mobile/aoYouTaiKong/"
         initWebView()
     }
 
@@ -36,7 +35,7 @@ class BridgeWebActivity : BaseActivity<ActivityBridgeWebBinding>() {
 
     }
 
-    @SuppressLint("JavascriptInterface")
+    @SuppressLint("JavascriptInterface", "SetJavaScriptEnabled")
     private fun initWebView() {
         webSettings = binding.webView.settings
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@@ -48,6 +47,7 @@ class BridgeWebActivity : BaseActivity<ActivityBridgeWebBinding>() {
         webSettings.javaScriptCanOpenWindowsAutomatically = true
         webSettings.javaScriptEnabled = true
         webSettings.setAppCacheEnabled(true)
+        webSettings.allowUniversalAccessFromFileURLs = true
         webSettings.cacheMode = WebSettings.LOAD_DEFAULT
         /**必须的设置, 访问网页版的H5,一定要设置。该方法是设置支持DomStorage,
          * DOM Storage 分为 sessionStorage 和 localStorage。
@@ -56,9 +56,18 @@ class BridgeWebActivity : BaseActivity<ActivityBridgeWebBinding>() {
          */
         webSettings.domStorageEnabled = true
         // 通过addJavascriptInterface()将Java对象映射到JS对象 下面一行代码是 JS调用原生方法
-        binding.webView.addJavascriptInterface(AndroidToJs(this), "callbackHandle")
-        binding.webView.addJavascriptInterface(AndroidToJs(this), "callbackImgHandle")
-        binding.webView.addJavascriptInterface(AndroidToJs(this), "callbackBackHandle")
+//        binding.webView.addJavascriptInterface(AndroidToJs(this), "callJavaFunc")
+//        binding.webView.callHandler("javascript:callJavaFunc()"
+//        ) { value -> Log.e("wpp", "----------------------------" + value) }
+
+        binding.webView.registerHandler("", object : BridgeHandler{
+            override fun handler(data: String?, function: CallBackFunction?) {
+
+            }
+        })
+
+//        binding.webView.addJavascriptInterface(AndroidToJs(this), "callbackImgHandle")
+//        binding.webView.addJavascriptInterface(AndroidToJs(this), "callbackBackHandle")
 
         binding.webView.isDrawingCacheEnabled = true
         binding.webView.buildDrawingCache()
@@ -72,16 +81,7 @@ class BridgeWebActivity : BaseActivity<ActivityBridgeWebBinding>() {
                 url.let {
                     view?.loadUrl(it)
                 }
-                return super.shouldOverrideUrlLoading(view, request)
-            }
-
-            override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
-                super.onPageStarted(view, url, favicon)
-            }
-
-            override fun onPageFinished(view: WebView?, url: String?) {
-                super.onPageFinished(view, url)
-
+                return true
             }
         }
         if (url.isNullOrEmpty().not()) {
@@ -113,4 +113,9 @@ class BridgeWebActivity : BaseActivity<ActivityBridgeWebBinding>() {
         }
         super.onResume()
     }
+
+    @JavascriptInterface
+    fun callbackHandle(){
+        Log.e("wpp", "-----------------------")
+    }
 }

+ 24 - 6
webview/src/main/java/com/yingyangfly/webview/WebviewActivity.kt

@@ -1,12 +1,12 @@
 package com.yingyangfly.webview
 
+import android.annotation.SuppressLint
 import android.content.pm.ActivityInfo
 import android.graphics.Bitmap
 import android.os.Build
-import android.webkit.WebResourceRequest
-import android.webkit.WebSettings
-import android.webkit.WebView
-import android.webkit.WebViewClient
+import android.os.Bundle
+import android.util.Log
+import android.webkit.*
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.yingyangfly.baselib.base.BaseActivity
 import com.yingyangfly.baselib.router.RouterUrlCommon
@@ -22,8 +22,13 @@ class WebviewActivity : BaseActivity<ActivityWebviewBinding>() {
 
     var url: String? = null
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        url = intent.getStringExtra("url") ?: ""
+        super.onCreate(savedInstanceState)
+    }
+
+    @SuppressLint("SetJavaScriptEnabled")
     override fun initViews() {
-        url = "http://60.205.201.7/cocos/mobile/whacaMole/"
         webSettings = binding.web.settings
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             webSettings?.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
@@ -43,10 +48,23 @@ class WebviewActivity : BaseActivity<ActivityWebviewBinding>() {
         webSettings?.domStorageEnabled = true
 
         // 通过addJavascriptInterface()将Java对象映射到JS对象 下面一行代码是 JS调用原生方法
-        binding.web.addJavascriptInterface(AndroidToJs(this), "callbackHandle")
+//        binding.web.addJavascriptInterface(AndroidToJs(this), "javascript:callJavaFunc")
 //        binding.web.addJavascriptInterface(AndroidToJs(this), "callbackImgHandle")
 //        binding.web.addJavascriptInterface(AndroidToJs(this), "callbackBackHandle")
 
+//        binding.web.evaluateJavascript("javascript:callJavaFunc()"
+//        ) { value -> Log.e("wpp", "----------------------------" + value) }
+        binding.web.evaluateJavascript(
+            "callJavaFunc(" + "funcName" + "," + "params" + "," + "receiveCall" + ")",
+            object :
+                ValueCallback<String> {
+                override fun onReceiveValue(value: String?) {
+                    Log.e("wpp", "666---------------------------------" + value)
+                }
+
+            })
+
+
         binding.web.isDrawingCacheEnabled = true
         binding.web.buildDrawingCache()
         binding.web.buildLayer()

+ 23 - 1
workbenches/src/main/java/com/yingyang/workbenches/WorkbenchesActivity.kt

@@ -37,7 +37,29 @@ class WorkbenchesActivity : BaseMVVMActivity<ActivityWorkbenchesBinding, Workben
             rvGame.adapter = gameAdapter
             gameAdapter.setData(gameList)
             gameAdapter.onGameImageClickListener = { bean, position ->
-                JumpUtil.jumpActivity(RouterUrlCommon.WEB_VIEW_INTERACTION_JS)
+                when (position) {
+                    0 -> {
+                        JumpUtil.jumpActivityWithUrl(
+                            RouterUrlCommon.load_web_view,
+                            "http://60.205.201.7/cocos/mobile/aoYouTaiKong/"
+                        )
+                    }
+                    1 -> {
+                        JumpUtil.jumpActivityWithUrl(
+                            RouterUrlCommon.load_web_view,
+                            "http://60.205.201.7/cocos/mobile/template/"
+                        )
+                    }
+                    2 -> {
+                        JumpUtil.jumpActivityWithUrl(RouterUrlCommon.load_web_view, "http://60.205.201.7/cocos/mobile/whacaMole/")
+                    }
+                    else -> {
+                        JumpUtil.jumpActivityWithUrl(
+                            RouterUrlCommon.load_web_view,
+                            "http://60.205.201.7/cocos/mobile/template/"
+                        )
+                    }
+                }
             }
         }
     }