使用html开发android会是一个流行的趋势,至少现在就有很多公司在android中使用了,我们这些js学的不怎么好的更不能落伍了:
android查询通话记录后调用js显示 android调js 点击拍照可将图片替换成拍照的图片
js调用android的Toast js调android
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/tv" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </ScrollView> </RelativeLayout>
html代码:
<meta http-equiv="Content-Type" content="text/html; charset=GBK"> <html> <head> <title>android调用js和js调用android</title> <script type="text/javascript"> function show(jsondata){ var jsonobjs = eval(jsondata); var table = document.getElementById("personTable"); for(var y=0; y<jsonobjs.length; y++){ var tr = table.insertRow(table.rows.length); var td1 = tr.insertCell(0); var td2 = tr.insertCell(1); td2.align = "center"; var td3 = tr.insertCell(2); td3.align = "center"; td1.innerHTML = jsonobjs[y].name; td2.innerHTML = jsonobjs[y].amount; td3.innerHTML = "<a href='javascript:contact.call(\""+ jsonobjs[y].phone+ "\")'>"+ jsonobjs[y].phone+ "</a>"; } } function funImgSrc(dateImg){ document.getElementById("imgSrc").src=dateImg; } </script> <style type="text/css"> #car{ width="30px" ; height="50px" } </style> </head> <body onload="javascript:contact.showcontacts()"> 第一次调用html页面 <button id="btn" onClick="javascript:contact.toast('123')">你好</button> <table border="0" width="100%" id="personTable" cellspacing="0"> <tr> <td width="30%" align="center">存款</td> <td align="center">电话</td> </tr> </table> <br/> <button id="car" onClick="javascript:contact.Carmeps()">点击拍照将下面的图片换掉</button> <br/> <img id="imgSrc" src="http://img.ycwb.com/news/attachement/jpg/site2/20120904/001e90704bd511affd1840.jpg" alt="上海鲜花港 - 郁金香" /> </body> </html>
操作的代码:加载本地的html代码
下面设计到的技术点有json的组装,WebView ,内容提供者,子线成和主线程的通信,android调用js,js调用android代码
public class MainActivity extends Activity { private WebView webView; private Handler handler; private List<user> listUser=null; @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_main); init(); listUser= new ArrayList<MainActivity.user>(); handler = new Handler() { @Override public void handleMessage(Message msg) { if(msg.what==100){ //System.out.println((String)msg.obj); if(listUser!=null&&listUser.size()>0){ final JSONArray jsonArray = new JSONArray(); for(int n=0;n<listUser.size();n++){ user u=listUser.get(n); try{ JSONObject jsonobj = new JSONObject(); jsonobj.put("phone", u.getUserphone()); jsonobj.put("name", u.getUsername()); jsonobj.put("amount",u.getAcc()); jsonArray.put(jsonobj); }catch(Exception e){ e.printStackTrace(); } } webView.loadUrl("javascript:show('" + jsonArray + "')"); System.out.println(jsonArray); } } } }; } @SuppressLint("JavascriptInterface") void init() { webView = (WebView) findViewById(R.id.webView); webView.requestFocus(); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setBuiltInZoomControls(true); webSettings.setSupportZoom(true); webSettings.setDomStorageEnabled(true); // webSettings.setPluginState(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setSupportZoom(true); webSettings.setBuiltInZoomControls(true); webSettings.setTextSize(WebSettings.TextSize.LARGER);//设置字体 // webSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);//话说是设置适应屏幕,设置了不是想要的效果 webView.addJavascriptInterface(new InJavaScriptLocalObj(), "contact");//创建调用js代码的桥梁 // webView.loadUrl("http://www.baidu.com"); // webView.loadUrl("file:///android_assets/indexfile/index.html"); webView.loadUrl("file:///android_asset/index.html"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); webView.setWebViewClient(new WebViewClient() { //使用WebView来访问html时,必须重写shouldOverrideUrlLoading方法 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); } //通过@JavascriptInterface来创建js调用android代码和android调用js代码 final class InJavaScriptLocalObj { @JavascriptInterface // JavaScript public void call(String phone) { startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone))); Toast.makeText(MainActivity.this, "正在呼叫:"+phone, Toast.LENGTH_LONG).show(); } // Html内容提供者查询数据后,将数据给js,js操作html显示数据 public void showcontacts() { new Thread(new Runnable() { @Override public void run() { Cursor cursor = MainActivity.this.getContentResolver() .query(CallLog.Calls.CONTENT_URI,new String[] { CalLog.Calls.NUMBER,CallLog.Calls.CACHED_NAME, }, null,null, CallLog.Calls.DEFAULT_SORT_ORDER); while (cursor.moveToNext()) { user u = new user(); if("".equals(cursor.getString(1))||null==cursor.getString(1)){ u.setUsername("百合不是茶.."); }else{ u.setUsername(cursor.getString(1)); } u.setUserphone(cursor.getString(0)); u.setAcc(""+cursor.getColumnCount()); listUser.add(u); } cursor.close(); handler.sendEmptyMessage(100); } }).start(); } //js调用toast的代码格为:javascript:contact.toast("你好") public void toast(String str) { Toast.makeText(MainActivity.this, "js调用android的方法: --- " + str, Toast.LENGTH_LONG).show(); } //js调用其拍照 public void Carmeps(){ Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 101); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==101){ Uri uri=data.getData(); if(uri!=null){ webView.loadUrl("javascript:funImgSrc('"+uri+"')");//android调用js修改图 } } } // 锟斤拷锟截硷拷拇锟斤拷锟� @Override public void onBackPressed() { // TODO Auto-generated method stub // super.onBackPressed(); if (webView != null && webView.canGoBack()) { webView.goBack(); } else { MainActivity.this.finish(); } } //由于需要在UI中将数据以json的形式给js,所以使用bean来操作 class user{ private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getUserphone() { return userphone; } public void setUserphone(String userphone) { this.userphone = userphone; } public String getAcc() { return acc; } public void setAcc(String acc) { this.acc = acc; } private String userphone; private String acc; } }
注意申请权限
相关推荐
在Android和JavaScript交互的过程中,开发者...总之,Android与JavaScript的相互调用极大地扩展了应用的功能,但同时也需要注意安全性和性能问题。合理利用这些机制,可以创建出既具有原生体验又具有Web灵活度的应用。
总结,Android和JavaScript的互相调用为开发者提供了更丰富的可能性,使我们可以构建出功能强大的混合应用。然而,需要注意的是,这种交互方式也带来了一些安全问题,比如XSS攻击,因此在实际开发中需要谨慎处理数据...
本示例将深入探讨如何实现Android和JavaScript的互相调用,以便于在混合应用开发中创建更加丰富的用户体验。 Android调用JavaScript: 在Android应用中,我们通常使用WebView来加载网页内容。通过WebView提供的`...
总结,Android与JavaScript的互相调用涉及到`WebView`组件、`WebViewClient`、`addJavascriptInterface()`、`evaluateJavascript()`等关键方法,以及`postMessage()`、`message`事件和URL Scheme等通信机制。...
android js 互相调用 android js 互相调用 android js 互相调用 android js 互相调用 android js 互相调用 android js 互相调用 android js 互相调用
总结,Android与JavaScript的相互调用是混合应用开发的核心技术之一,它使得原生应用能够充分利用Web技术的优势,同时结合Android的强大功能,提供更加丰富和灵活的用户体验。通过理解并熟练运用上述知识点,开发者...
1. **调用JavaScript**:Android应用可以通过`loadUrl`方法执行JavaScript代码,从而实现调用JavaScript函数。 ```java webView.loadUrl("javascript:myJsFunction()"); ``` 这里,`myJsFunction()`是你在网页中...
在标题"Android 与 JS 相互调用——绝对简单管用"中,我们可以推断这是一个关于如何简便地设置和使用JSBridge的教程。它提供了一个完整的示例项目,包含注释和可以直接运行的代码,帮助开发者快速上手。 在标签"JS...
在Android开发中,JavaScript(JS)与Java代码的相互调用是常见的需求,尤其是在混合式应用开发中。这种交互能够充分利用JavaScript的灵活性和Java的强大功能,实现更丰富的用户体验。本Demo旨在提供一个清晰、易懂...
Android 与 js 之间的调用Android开发之WebView的使用 WebView与javascript相互调用 .WebView不但可以运行一段HTML代码,还有一个重要特点,就是WebView可以同Javascript互相调用。 通过addJavascriptInterface...
本文将详细介绍如何在Android中使用WebView实现Java程序与JS脚本的相互调用。 ### 1. 添加WebView到布局 首先,在XML布局文件中添加WebView组件,例如在`activity_main.xml`中: ```xml android:id="@+id/...
本教程将详细介绍如何在Android与H5之间进行相互调用,让Java与JavaScript之间实现无缝通信。 首先,我们要了解Android中的WebView组件。WebView是Android SDK提供的一种原生控件,它允许我们在Android应用中加载和...
现在,JavaScript可以通过`window.android.getAndroidMessage`调用这个方法。在HTML文件(例如`index.html`)中,我们可以这样调用: ```html <!DOCTYPE html> function callAndroidMethod() { var message =...
本教程将深入探讨如何在Android的Webview中实现Android与JavaScript的相互调用。 ### Android调用JavaScript 当需要在Android应用中调用JavaScript函数时,我们可以使用`WebView`类提供的`loadUrl()`方法。这个...
本文将深入探讨如何在Android和JavaScript之间实现互相调用,包括Android调用JS的方法以及JS如何调用Android的特定功能,如输入文字到网页、访问本地相册、使用摄像头拍照以及播放本地视频。 一、Android调用...
除了让Android调用JavaScript外,还可以通过`postMessage`和`WebChromeClient.onMessage`方法使JavaScript能够调用Android方法。`postMessage`在JavaScript中发送消息,`onMessage`在Android端接收并处理消息。 ``...
这个方法允许我们在JavaScript和Android之间创建一个桥梁,让它们可以互相调用方法。例如: ```java WebView webView = (WebView) findViewById(R.id.web_view); webView.getSettings().setJavaScriptEnabled(true)...
综上所述,这个"Android中JS与Java相互调用Demo"主要演示了如何在Android应用中利用`WebView`组件实现JavaScript与Java的交互,这对于开发混合应用或者增强应用功能具有重要的实践价值。通过学习和理解这个Demo,...
本篇文章将详细探讨Android中的WebView与JavaScript如何进行交互,包括互相调用的原理、步骤以及注意事项。 **一、WebView基础知识** 1. **WebView的引入**:在Android应用中,我们需要在布局XML文件中添加WebView...
本示例将探讨如何在Android和iOS平台上实现JS与原生代码的相互调用。 **1. JavaScript与原生代码的交互基础** - **WebView**: 在Android和iOS中,`WebView`组件是实现JS与原生代码交互的基础。`WebView`是一个可以...