• Android中Java与web通信



      Android中Java与web通信不是新的技术了,在android公布之初就支持这样的方式,2011年開始流行,而这样的模式开发也称作Hybird模式。

    这里对android中的Java与web通信方式做一下总结。Android中有3种方式能够实现Java与web通信。


    1、重写WebViewClient

     private class MyWebViewClient extends WebViewClient {
    	        @Override
    	        public boolean shouldOverrideUrlLoading(WebView view, String url) {
    	            if (Uri.parse(url).getHost().equals("www.example.com")) {
    	                // This is my web site, so do not override; let my WebView load the page
    	                
    	            	Toast.makeText(WebViewClientActivity.this, url, Toast.LENGTH_SHORT).show();
    	    			
    	            	return false;
    	            }
    
    				
    	            return true;
    	        }
    	    }

    通过shouldOverrideUrlLoading(WebView view, String url)返回的url获取数据

    比如:url=“www.example.com?body=loadurl” 能够截取后面的body数据。


    在web中调用方式:

     <button onclick="window.open('www.example.com?

    body=loadurl')">showAndroidToast</button>



    2、重写WebChromeClient

     final class MyWebChromeClient extends WebChromeClient {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                Log.d("MyWebChromeClient", message);
                
                Toast.makeText(OnJsPromptActivity.this, message, Toast.LENGTH_SHORT).show();
                result.confirm();
                return true;
            }
    
    		@Override
    		public boolean onJsConfirm(WebView view, String url, String message,
    				JsResult result) {
    			// TODO Auto-generated method stub
    			return super.onJsConfirm(view, url, message, result);
    		}
    
    		@Override
    		public boolean onJsPrompt(WebView view, String url, String message,
    				String defaultValue, JsPromptResult result) {
    			
    			 Toast.makeText(OnJsPromptActivity.this, message, Toast.LENGTH_SHORT).show();
    			// TODO Auto-generated method stub
    			//return super.onJsPrompt(view, url, message, defaultValue, result);
    			 
    			 result.confirm();
    	         return true;
    		}
            
            
        }

    使用onJsAlert或者onJsPrompt,onJsAlert。onJsPrompt分别相应JS中的alert和prompt。


    在web中调用方式:

    <button onclick="showAndroidToast('Hello Android!');">showAndroidToast</button>
    
    <script type="text/javascript">
        function showAndroidToast(toast) {
            prompt('js prompt');  
        }
      </script>



    3、addJavascriptInterface

    mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
    
    public class WebAppInterface {
            Context mContext;
    
            /** Instantiate the interface and set the context */
            WebAppInterface(Context c) {
                mContext = c;
            }
    
            //在Android 4.2以上的,google作了修正。通过在Java的远程方法上面声明一个@JavascriptInterface,
            /** Show a toast from the web page */
            @JavascriptInterface
            public void showToast(String toast) {
                Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
            }
        }


    addJavascriptInterface是Android提供的方法。包括两个參数。第一个是java中实现的类,类提供了javascript訪问方法。第二个參数是java类映射到javascript的对象名。


    在web中调用方式:

      <button onclick="showAndroidToast('addjavascriptinterface');">showAndroidToast</button>
    
      <script type="text/javascript">
        function showAndroidToast(toast) {
    
  • 相关阅读:
    Java必会之多线程
    第一周JVM核心技术-工具与GC策略
    JVM核心技术(第一篇)
    SpringCloudAlibaba使用seata做分布式事务
    Go中的interface(接口)
    快排与堆排
    优先队列原来不难!带你手写一个
    【LeetCode】557. 反转字符串中的单词 III
    【LeetCode】214. 最短回文串
    【LeetCode】17. 电话号码的字母组合(回溯)
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7235971.html
Copyright © 2020-2023  润新知