Android 与 js 交互

来源:互联网 发布:查开放房记录软件 编辑:程序博客网 时间:2024/05/28 03:03
Android原生调用js代码
1. 在activity_main中,定义一个webView,在MainActivity中WebView添加 js支持getSettings().setJavaScriptEnabled(true);

2.然后 .loadUrl(); 就可以加载布局了


assets下的代码:test.html

<!DOCTYPE html><html lang="en"><head>   <meta charset="UTF-8">   <title>Android与JS交互</title>   <script type="text/javascript">      function test(str) {         document.getElementById("content").innerHTML=str;      }      function callRes() {         var imgSrcs = "";         var imgs = document.getElementsByTagName("img");         for(var i = 0; i < imgs.length; i++) {            imgSrcs += imgs[i].src;            if(i < imgs.length-1) {               imgSrcs += "|";            }         }         window.android.callAndroid(imgSrcs);      }      function getIndex(index){         window.android.getIndex(index);      }   </script></head><body onload="callRes()">   <div>      这是一条神奇的天路     </div>   <div id="content">            </div>   <img onclick="getIndex(0)" src="http://pic.58pic.com/58pic/14/27/45/71r58PICmDM_1024.jpg" width="100%" />   <img onclick="getIndex(1)" src="http://pic17.nipic.com/20111122/6759425_152002413138_2.jpg" width="100%" />   <img onclick="getIndex(2)" src="http://pic10.nipic.com/20100929/4308872_150108084472_2.jpg" width="100%" /></body></html>
代码块:

HackyViewPager:import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.MotionEvent;public class HackyViewPager extends ViewPager {       public HackyViewPager(Context context) {        super(context);    }    public HackyViewPager(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {      try {         return super.onInterceptTouchEvent(ev);      } catch (IllegalArgumentException e) {         return false;      }    }}
MainActivity:import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.webkit.JavascriptInterface;import android.webkit.WebView;import android.widget.Button;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {    private static final String TAG = "MainActivity";    private WebView mWebView;    private Button mJs;    private ArrayList<String> images;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mWebView = (WebView) findViewById(R.id.web_view);        mJs = (Button) findViewById(R.id.js_jiaohu);        images=new ArrayList<>();        //添加js支持        mWebView.getSettings().setJavaScriptEnabled(true);        mWebView.loadUrl("file:///android_asset/test.html");        mWebView.addJavascriptInterface(this, "android");        mJs.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // Android原生调用js代码                mWebView.loadUrl("javascript:test('liujie刘婕最棒')");            }        });    }        @JavascriptInterface        public void callAndroid(final String text){            // 给Js提供接口,传过所有图片的url            Log.i(TAG, "callAndroid: " + text);            runOnUiThread(new Runnable() {                @Override                public void run() {                    // 图片用"|"隔开,遍历传过来的图片url集合,解析出其中的真实图片url                    if (!TextUtils.isEmpty(text)) {                        if (text.contains("|")) {                            String[] imgs = text.split("\\|");                            if (imgs != null) {                                for (String img : imgs) {                                    images.add(img);                                }                            }                        }                    }                }            });        }    @JavascriptInterface    public void getIndex(final int index) {        // 给JS提供的接口,传过点击的图片的索引位置        Log.i(TAG, "getIndex: " + index);        Intent intent = new Intent(MainActivity.this, PhotoActivity.class);        intent.putStringArrayListExtra("imgs", images);        intent.putExtra("index", index);        startActivity(intent);    }}
PhotoActivity:
import android.content.Intent;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.view.ViewGroup;import com.bumptech.glide.Glide;import java.util.ArrayList;import uk.co.senab.photoview.PhotoView;import uk.co.senab.photoview.PhotoViewAttacher;public class PhotoActivity extends AppCompatActivity {    private ArrayList<String> images;    private int index = 0;    private HackyViewPager mPhotoview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_photo);        Intent intent = getIntent();        images = intent.getStringArrayListExtra("imgs");        if (null == images) {            images = new ArrayList<>();        }        index = intent.getIntExtra("index", 0);        mPhotoview = (HackyViewPager) findViewById(R.id.photoview);        mPhotoview.setAdapter(new PagerAdapter() {            @Override            public Object instantiateItem(ViewGroup container, int position) {                PhotoView photoView = new PhotoView(container.getContext());                Glide.with(container.getContext()).load(images.get(position)).into(photoView);                //点击事件                photoView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {                    @Override                    public void onPhotoTap(View view, float x, float y) {                        Log.i("--------------", "onPhotoTap: x =" + x +"  y = " + y);                    }                });                container.addView(photoView);                return photoView;            }            @Override            public void destroyItem(ViewGroup container, int position, Object object) {                container.removeView((View) object);            }            @Override            public int getCount() {                return images.size();            }            @Override            public boolean isViewFromObject(View view, Object object) {                return view == object;            }        });        mPhotoview.setCurrentItem(index);    }    }
activity_main中:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"   >    <Button        android:id="@+id/js_jiaohu"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="调用js代码"/><WebView    android:id="@+id/web_view"    android:layout_width="match_parent"    android:layout_height="wrap_content"></WebView></LinearLayout>

原创粉丝点击