`
百合不是茶
  • 浏览: 354693 次
社区版块
存档分类
最新评论

android和js的相互调用

阅读更多

使用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;
	}
}

 

 

 

 

注意申请权限

 

 

  • 大小: 259.9 KB
0
0
分享到:
评论

相关推荐

    android和js相互调用

    在Android和JavaScript交互的过程中,开发者...总之,Android与JavaScript的相互调用极大地扩展了应用的功能,但同时也需要注意安全性和性能问题。合理利用这些机制,可以创建出既具有原生体验又具有Web灵活度的应用。

    Android和JavaScript互相调用

    总结,Android和JavaScript的互相调用为开发者提供了更丰富的可能性,使我们可以构建出功能强大的混合应用。然而,需要注意的是,这种交互方式也带来了一些安全问题,比如XSS攻击,因此在实际开发中需要谨慎处理数据...

    android和javascript互相调用

    本示例将深入探讨如何实现Android和JavaScript的互相调用,以便于在混合应用开发中创建更加丰富的用户体验。 Android调用JavaScript: 在Android应用中,我们通常使用WebView来加载网页内容。通过WebView提供的`...

    android、js互相调用

    总结,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 js 互相调用

    Android与JS相互调用

    总结,Android与JavaScript的相互调用是混合应用开发的核心技术之一,它使得原生应用能够充分利用Web技术的优势,同时结合Android的强大功能,提供更加丰富和灵活的用户体验。通过理解并熟练运用上述知识点,开发者...

    Android Webview 和Javascript交互,实现Android和JavaScript相互调用

    1. **调用JavaScript**:Android应用可以通过`loadUrl`方法执行JavaScript代码,从而实现调用JavaScript函数。 ```java webView.loadUrl("javascript:myJsFunction()"); ``` 这里,`myJsFunction()`是你在网页中...

    Android 与 JS 相互调用——绝对简单管用

    在标题"Android 与 JS 相互调用——绝对简单管用"中,我们可以推断这是一个关于如何简便地设置和使用JSBridge的教程。它提供了一个完整的示例项目,包含注释和可以直接运行的代码,帮助开发者快速上手。 在标签"JS...

    android JS与java代码相互调用

    在Android开发中,JavaScript(JS)与Java代码的相互调用是常见的需求,尤其是在混合式应用开发中。这种交互能够充分利用JavaScript的灵活性和Java的强大功能,实现更丰富的用户体验。本Demo旨在提供一个清晰、易懂...

    Android 与javascript相互调用

    Android 与 js 之间的调用Android开发之WebView的使用 WebView与javascript相互调用 .WebView不但可以运行一段HTML代码,还有一个重要特点,就是WebView可以同Javascript互相调用。 通过addJavascriptInterface...

    android使用webView实现java程序与js脚本的相互调用

    本文将详细介绍如何在Android中使用WebView实现Java程序与JS脚本的相互调用。 ### 1. 添加WebView到布局 首先,在XML布局文件中添加WebView组件,例如在`activity_main.xml`中: ```xml android:id="@+id/...

    Android与H5交互相互调用对方的方法

    本教程将详细介绍如何在Android与H5之间进行相互调用,让Java与JavaScript之间实现无缝通信。 首先,我们要了解Android中的WebView组件。WebView是Android SDK提供的一种原生控件,它允许我们在Android应用中加载和...

    Android原生java语句 和html js互相调用 传递参数

    现在,JavaScript可以通过`window.android.getAndroidMessage`调用这个方法。在HTML文件(例如`index.html`)中,我们可以这样调用: ```html &lt;!DOCTYPE html&gt; function callAndroidMethod() { var message =...

    android之webview与js相互调用

    本教程将深入探讨如何在Android的Webview中实现Android与JavaScript的相互调用。 ### Android调用JavaScript 当需要在Android应用中调用JavaScript函数时,我们可以使用`WebView`类提供的`loadUrl()`方法。这个...

    android与js互相调用

    本文将深入探讨如何在Android和JavaScript之间实现互相调用,包括Android调用JS的方法以及JS如何调用Android的特定功能,如输入文字到网页、访问本地相册、使用摄像头拍照以及播放本地视频。 一、Android调用...

    android html js相互调用

    除了让Android调用JavaScript外,还可以通过`postMessage`和`WebChromeClient.onMessage`方法使JavaScript能够调用Android方法。`postMessage`在JavaScript中发送消息,`onMessage`在Android端接收并处理消息。 ``...

    android demo,android调用js方法

    这个方法允许我们在JavaScript和Android之间创建一个桥梁,让它们可以互相调用方法。例如: ```java WebView webView = (WebView) findViewById(R.id.web_view); webView.getSettings().setJavaScriptEnabled(true)...

    Android中JS与Java相互调用Demo

    综上所述,这个"Android中JS与Java相互调用Demo"主要演示了如何在Android应用中利用`WebView`组件实现JavaScript与Java的交互,这对于开发混合应用或者增强应用功能具有重要的实践价值。通过学习和理解这个Demo,...

    android中Webview与javascript的交互(互相调用)

    本篇文章将详细探讨Android中的WebView与JavaScript如何进行交互,包括互相调用的原理、步骤以及注意事项。 **一、WebView基础知识** 1. **WebView的引入**:在Android应用中,我们需要在布局XML文件中添加WebView...

    跨android和iOS平台的js和原生代码相互调用示例

    本示例将探讨如何在Android和iOS平台上实现JS与原生代码的相互调用。 **1. JavaScript与原生代码的交互基础** - **WebView**: 在Android和iOS中,`WebView`组件是实现JS与原生代码交互的基础。`WebView`是一个可以...

Global site tag (gtag.js) - Google Analytics