• android 调用js,js调用android


    Java调用JavaScript

     

    1.main.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        
        <TextView   
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:text="Welcome to Mr Wei's Blog." 
            /> 
        <WebView 
            android:id="@+id/webview" 
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
        /> 
        <Button 
            android:id="@+id/button" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="Change the webview content" 
        /> 
    </LinearLayout>

    2.demo.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <html
        <mce:script language="javascript"><!-- 
        
            function fillContent(){ 
                document.getElementById("content").innerHTML =  
                     "This Content is showed by Android invoke Javascript function."; 
            
           
    // --></mce:script>   
      <body
        <p><a onClick="window.demo.startMap()" href="">Start GoogleMap</a></p
        <p id="content"></p
        <p>A Demo ----Android and Javascript invoke each other.</p
        <p>Author:Frankiewei</p
      </body
    </html>

    3.WebViewDemo.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    package com.tutor.webwiewdemo;
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.widget.Button;
    public class WebViewDemo extends Activity {
        private WebView mWebView;
        private Button mButton;
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            setupViews();
        }
        //初始化
        private void setupViews() {
            mWebView = (WebView) findViewById(R.id.webview);
            WebSettings mWebSettings = mWebView.getSettings();
            //加上这句话才能使用javascript方法
            mWebSettings.setJavaScriptEnabled(true);
            //增加接口方法,让html页面调用
            mWebView.addJavascriptInterface(new Object() {
                //这里我定义了一个打开地图应用的方法
                public void startMap() {
                    Intent mIntent = new Intent();
                    ComponentName component = new ComponentName(
                            "com.google.android.apps.maps",
                            "com.google.android.maps.MapsActivity");
                    mIntent.setComponent(component);
                    startActivity(mIntent);
                }
            }, "demo");
            //加载页面
            mWebView.loadUrl("file:///android_asset/demo.html");
            mButton = (Button) findViewById(R.id.button);
            //给button添加事件响应,执行JavaScript的fillContent()方法
            mButton.setOnClickListener(new Button.OnClickListener() {
                public void onClick(View v) {
                    mWebView.loadUrl("javascript:fillContent()");
                }
            });
        }
    }

      

               

                  首界面                                               点击按钮时,html内容改变

    MainActivity.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    package com.example.jsdemo;
     
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
     
    public class MainActivity extends AppCompatActivity {
        private WebView wView;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            wView = (WebView) findViewById(R.id.wView);
            wView.loadUrl("file:///android_asset/demo1.html");
            WebSettings webSettings = wView.getSettings();
            //①设置WebView允许调用js
            webSettings.setJavaScriptEnabled(true);
            webSettings.setDefaultTextEncodingName("UTF-8");
            //②设置支持js调用java
            wView.addJavascriptInterface(new AndroidAndJSInterface(),"Android"");
        }
     
     class AndroidAndJSInterface{
            @JavascriptInterface
            public void showToast(){
                Toast.makeText(MainActivity.this"我被js调用了", Toast.LENGTH_SHORT).show();
            }
        }
    }

    注意:解决该WebView.addJavascriptInterface接口不起作用的两种办法

    ①针对版本改成16

    ②在JavaScript接口类的方法加上@JavascriptInterface注解

    2.JavaScript调用Java对象示例

    demo1.html

    1
    <input type="button" value="点击Android被调用" onclick="window.Android.showToast()" />

      

  • 相关阅读:
    java Semaphore的介绍和使用
    java CyclicBarrier的介绍和使用
    java CountDownLatch 使用介绍
    android模拟器不能上网设置
    计算几何题集
    BZOJ1004: [HNOI2008]Cards
    BZOJ1029: [JSOI2007]建筑抢修
    BZOJ1037: [ZJOI2008]生日聚会Party
    BZOJ1083: [SCOI2005]繁忙的都市
    Java开发笔记(一百一十四)利用Socket传输文本消息
  • 原文地址:https://www.cnblogs.com/aibabel/p/11101759.html
Copyright © 2020-2023  润新知