`
hbxflihua
  • 浏览: 677798 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android 嵌入服务端页面二 之WebView与页面互调

 
阅读更多

WebView引入页面及回调处理

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@color/white"
  android:orientation="vertical"
  >
  	<!-- 头部和尾部为重用和统一风格 -->
    <!-- 头部  -->
	<include layout="@layout/jx_two_page_header"/>
	<WebView
	    android:id="@+id/wvTicketOne"
	    android:layout_width="fill_parent"
	    android:layout_height="fill_parent" 
	    />    
    
	<!-- 尾部 -->
	<include android:id="@+id/footer" layout="@layout/jx_two_footer"/>
</LinearLayout>

 ActivityonCreate方法中加载页面

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.ticket_one);

		/**
		 * 在android 2.3以后进行了较为严格的限制
		 * 该类可以用来帮助开发者改进他们编写的应用。
		 * 并且提供了各种的策略,
		 * 这些策略能随时检查和报告开发者开发应用中存在的问题
		 */
		StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
				.detectDiskReads().detectDiskWrites().detectNetwork() 
				.penaltyLog().build());
		StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
				.detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()
				.build());		

		Intent fromInent = getIntent();
		ticketId = fromInent.getStringExtra("ticketId");
		//是否管理员
		String isManage = mPreferences.getString(Constants.USER_IS_MANAGE, String.valueOf(false));
		
		//找到WebView控件
		wvTicketOne = (WebView) findViewById(R.id.wvTicketOne);
		//设置为可访问页面JS,在Activity和页面直接互调时使用
		wvTicketOne.getSettings().setJavaScriptEnabled(true);
		
		wvTicketOne.setWebViewClient(new WebViewClient());		
		//在onCreate 方法中调用WebView的loadUrl方法加载页面内容
		wvTicketOne.loadUrl(Constants.URL_TICKET_ONE + ticketId+"&isManage="+isManage);
		//添加页面可访问的JS接口
		wvTicketOne.addJavascriptInterface(new JavaScriptInterface(), "android");
		
		// Activity间跳转:转到踏勘单
		TextView takandan = (TextView) findViewById(R.id.tanKanDan);
		takandan.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(TicketOneActivity.this,TicketTanKanDan.class);
				intent.putExtra("ticketId", ticketId);
				startActivity(intent);
			}
		});
		
		//返回按钮:这里做了最简单的处理,直接把当前Activity给关掉,
		//程序自动返回到上一个Activity(前提是上一个Activity没有销毁)
		ImageButton btnBack = (ImageButton) findViewById(R.id.cursor_back);
		btnBack.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				finish();
			}
		});
		
		//隐藏(后退、1/1、前进、刷新)按钮
		ImageButton cursor_left = (ImageButton) findViewById(R.id.cursor_left);
		cursor_left.setVisibility(View.INVISIBLE);
		ImageButton cursor_right = (ImageButton) findViewById(R.id.cursor_right);
		cursor_right.setVisibility(View.INVISIBLE);
		ImageButton cursor_refresh = (ImageButton) findViewById(R.id.cursor_refresh);
		cursor_refresh.setVisibility(View.INVISIBLE);
		TextView tv_infoTotal=(TextView)findViewById(R.id.infoTotal);
		tv_infoTotal.setVisibility(View.INVISIBLE);
		TextView tv_infoView=(TextView)findViewById(R.id.infoView);
		tv_infoView.setVisibility(View.INVISIBLE);
		TextView tv_infoNum=(TextView)findViewById(R.id.infoNum);
		tv_infoNum.setVisibility(View.INVISIBLE);
	}

 

Activity中创建一个页面可访问的JavaScript接口,供页面调用

 

private class JavaScriptInterface {
		
		private MediaPlayer mediaPlayer;
		
		public JavaScriptInterface(){
			mediaPlayer = new MediaPlayer();
		}
		
		/**
		 * 播放 
		 * @param url 播放文件路径
		 */
		public void playMusic(String url){
			if(mediaPlayer.isPlaying()){
				mediaPlayer.reset();
			}
			try{
				mediaPlayer.setDataSource(url);
				mediaPlayer.prepare();
				mediaPlayer.start();
			}catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		/**
		 * 暂停 
		 */
		public void stopMusic(){
			if(mediaPlayer.isPlaying()){
				mediaPlayer.stop();
			}
		}	
		
		/**
		 * GPS显示
		 * @param gps
		 */
		public void showGps(String gps){
			Intent i = new Intent(TicketOneActivity.this, MapActivity.class);
			i.putExtra("gps", gps);
			startActivity(i);
		}
		
		/**
		 * 提示信息
		 * @param msg
		 */
		public void showMsg(String msg){
			if(CommonUtils.validateStr(msg)){
				Toast.makeText(TicketOneActivity.this, msg, Toast.LENGTH_SHORT).show();
			}
			if(CommonUtils.matchString(msg, "提交成功")){
				finish();
			}
		}
	}
 

上面的showMsg方法在页面被调用

	//页面调用Activity中的JavaScriptInterface方法
 	function Msg(msg){
 		if (window.android){
	      	window.android.showMsg(msg);
	   	}else{
			alert(msg);
	   	}
 	}

 ----------------------------------------------

 

Activity中,也可以将处理的结果返回给页面。以下是一个在任务监听中将结果返回给页面JS的例子。

/**
	 * 签名任务监听
	 * 
	 * @author lihua
	 */
	private TaskListener signTicketTaskListener = new TaskAdapter() {

		@Override
		public void onPostExecute(GenericTask task, String result) {
			
			//处理完成删除本地文件
			FileHelper.delFiles(REC_DIR);
			
			JSONObject signInfo = (JSONObject) getApi().getBackResult(result,
					getApplicationContext());
			
			String data = "";
			String signdate = "";
			try {
				data = signInfo.getString("result");
				signdate = signInfo.getString("signdate");
				
			} catch (JSONException e) {
				e.printStackTrace();
			}
				
			String [] signArray = CommonUtils.splitByTag(data, "$");
			String words = "",sign ="",gps="",voice="",gid = "",gdt="";
			//add edit
			if(signArray!=null&&signArray.length>0)
				for (String s : signArray) {
					if(s!=null&&s.startsWith(Constants.START_TAG_WORD))
						words = s.replace(Constants.START_TAG_WORD, "");
					if(s!=null&&s.startsWith(Constants.START_TAG_SIGN))
						sign = s.replace(Constants.START_TAG_SIGN, "");
					if(s!=null&&s.startsWith(Constants.START_TAG_GPS))
						gps = s.replace(Constants.START_TAG_GPS, "");
								
				}
			
			String cbstr ="";
				//页面显示设置,调用页面名称为cbTicketSign的js函数
				cbstr= "javascript:cbTicketSign('"+
						words+"','"+
						Constants.SERVER_FILE_CONTENT_TICKET + sign+"','"+
						gps+"','"+
						signdate+"'"+
						")";				
			System.out.println("cbstr:"+cbstr);
			wvTicketOne.loadUrl(cbstr);
			//关闭提示对话框
			mDialog.dismiss();
		}

		@Override
		public String getName() {
			return "Login";
		}
	};

 

 页面JS针对Activity的回调函数和JS的普通函数没有多大区别,以下是上面Activity中调用的JS函数。

 

          //工作票签名回调
 	 function cbTicketSign(sAttr, words, sign, gps ,voice , date){
		if(sAttr=="workGroupSign"){
			$('#workGroupSignLbl').html(words);
			$('#workGroupSignLbl').hide();
			$('#workGroupSignImg').show();
			$("#workGroupSignImg").attr("src","${root }"+sign);						
			$("#workGroupSignGps").attr("src","${root}/images/ticket/gps.png");			
			$("#workGroupSignGps").bind("click",function(){ showGps(gps); }); 
			 
		}				
 	 }
 

分享到:
评论

相关推荐

    Android与JS互调,Android与JS相互传值,webview展示

    1.本文采用的是android调用assest中的本地.html文件,webview展示(加载网络的html效果是一样的,把url替换掉就行) 2.包含本地.html文件加载,点击.html控件,Android端响应 3.包含本地.html文件加载,点击.html...

    Android Webview JS互调

    Android 中通过WebView和HTML实现JS交互 Android(Java)与JavaScript(HTML)交互有四种情况: 1) Android(Java)调用HTML中js代码 2) Android(Java)调用HTML中js代码(带参数) 3) HTML中js调用Android...

    reactNative之Webview与h5互调

    本文将深入探讨React Native中的Webview与H5的互调机制,以及如何利用它们来增强应用的功能和用户体验。 首先,React Native的`&lt;WebView&gt;`组件是用于加载网页内容的组件,它能够渲染HTML、CSS以及JavaScript。通过...

    U3D嵌入Web页面,利用webview

    然后,你可以通过Unity脚本与Web页面进行通信,例如调用Web页面的JavaScript函数,或者接收来自Web页面的消息。 2. 使用第三方WebView插件:Unity Asset Store上有很多第三方的WebView插件,如UnityWebView、Easy ...

    android滑动切换页面——(webview + viewpager)的演示

    WebView是Android SDK中的一个组件,用于加载和显示网页内容,而ViewPager则是一个可以左右滑动切换多个页面的视图容器。 首先,我们需要了解ViewPager的基本用法。ViewPager是一个自定义View,它允许用户通过横向...

    Android代码-Android-X5WebView基本封装

    Android-X5WebView基本封装和使用 通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题...

    webview 监听页面显示事件

    通过WebView,我们可以展示HTML、CSS和JavaScript等Web技术构建的页面,同时也可以与原生应用进行交互。本文将深入探讨如何监听WebView中的页面显示事件,以便在特定时刻执行相应的操作。 首先,我们需要了解...

    android与JS互调

    首先,Android提供了WebView组件,它是实现Android与JS互调的基础。WebView是一个可以加载和显示网页的视图,它可以嵌入到Android应用中,让用户在不离开应用的情况下浏览网页内容。通过WebView,我们可以加载本地或...

    Android使用WebView调用H5完成摄像头扫描二维码

    通过WebView,开发者可以将Web技术与原生Android应用结合,实现更丰富的交互体验。 为了调用摄像头并扫描二维码,我们需要在H5页面中使用相关的JavaScript库,例如`html5-qrcode`。这个库提供了一种简单的方法来...

    Android中WebView拿到当前的网址和上一页面的网址

    以上就是如何在Android的WebView中获取当前页面和上一页面URL的基本实现。在实际项目中,可能还需要考虑其他因素,如页面加载进度、错误处理、隐私策略等,以确保用户体验和应用性能。希望这个例子能对你在使用...

    Android WebView获取源码

    在Android开发中,`WebView` 是一个非常重要的组件,它允许开发者在应用程序内嵌入一个浏览器,从而展示HTML、CSS和JavaScript等Web内容。本文将详细介绍如何在Android中使用`WebView`来获取网页的源码,并封装成一...

    Android中的webview监听每次URL变化实例

    本文档将详细讲解如何在Android的WebView中监听URL的变化以及如何监听页面加载的完成情况。 首先,要监听WebView中URL的变化,可以通过设置自定义的WebViewClient,并重写onLoadResource方法。当WebView开始加载新...

    webview和js互调

    二、JavaScript与WebView的交互方式 1. **JavaScript到原生的通信:** - `WebView注入JavaScript接口`:在Android中,我们可以使用`addJavascriptInterface()`方法将Java对象暴露给JavaScript,使得JavaScript可以...

    android的webView的登录实例

    本实例将详述如何使用Android Studio 3.1.2版本,通过WebView来创建一个简单的登录界面,该界面使用本地HTML页面进行设计。下面我们将逐步探讨实现这个功能的关键步骤和涉及的技术点。 1. **创建新项目** 首先,...

    Android与js互调

    通过WebView,我们可以将JavaScript代码嵌入到Android应用中,同时利用WebView提供的API实现Android与JavaScript之间的通信。 1. **JavaScriptInterface**: Android通过`addJavascriptInterface()`方法暴露Java...

    Android高级应用源码-自定义WebView,自带加载动画.rar

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,实现与网页的交互。这个“Android高级应用源码-自定义WebView,自带加载动画”压缩包提供了一个实例,展示了如何在WebView的...

    Android WebView 去除标题

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。有时候,我们可能希望去除WebView中的标题部分,以实现更自定义化的界面设计。本篇文章将详细探讨如何在Android的...

    Android Webview视频播放器

    在Android平台上,Webview是一个非常重要的组件,它允许开发者在原生应用中嵌入网页内容。这个项目"Android Webview视频播放器"是利用Webview来实现HTML5视频播放功能的示例。以下是对这个项目的详细解读: 1. **...

    Android WebView H5调用拍照

    在“Android WebView H5调用拍照”这个主题中,我们将深入探讨如何通过WebView组件和H5页面实现用户调用手机摄像头拍照的功能。 首先,我们需要理解WebView的基本使用。在AndroidManifest.xml文件中,为应用添加...

    android 通过生成的pdf文件发送服务端调用打印 ,打印预览用WebView显示本地Html

    在安卓平台上,实现通过生成PDF文件并将其发送到服务端进行打印,以及使用WebView来预览本地HTML,是一项常见的需求。这个过程涉及到多个技术环节,包括PDF生成、网络通信、HTML渲染以及打印服务的调用。以下是这些...

Global site tag (gtag.js) - Google Analytics