android 通过webView,简单的通过网页唤起本地界面,如果比较多的话最好不要用原生的webView和js去搭建,用框架去做

来源:互联网 发布:阿里妈妈淘宝客下载 编辑:程序博客网 时间:2024/06/14 14:34

文章来自:http://blog.csdn.net/intbird

http://blog.csdn.net/intbird/article/details/49078509

NOTE : 

1.--

js和android交互是在 javabrige 线程中的,这个线程的hanlder是主线程的,

也就是说需要主线程new的东西可以在这个线程中new;

2.--

Js文件中不能使用 // 做为注释,否则不读取该js;

 //弹窗提示

function appAlert(msg){

javascript.android.appAlert(msg);

}

3.--

@javascriptInterface 这个就不用说了,直接调用的方法必须加这个,如果target API版本大于17的话

@suppressLint(''SetJavaScriptEnabled")很久之前也用这个

4.--

android接受不了js中的对象,比如

java:

@javascriptInterface

public void input(Object obj){

}

@javascriptInterface

public void input(String name,String pwd){

}

js:

javascript.android.input({

user:user.name,

user:user.pwd

});

这个是接收不了的,即使只有一个obj对象;


webView设置


package com.idonoo.shareCar.ui.commom.activitys;import java.util.HashMap;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.text.TextUtils;import android.view.KeyEvent;import android.view.View;import android.webkit.DownloadListener;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.webkit.WebViewClient;import com.idonoo.frame.GlobalInfo;import com.idonoo.frame.beanType.IdentifyType;import com.idonoo.frame.beanType.WebUrlType;import com.idonoo.shareCar.R;import com.idonoo.shareCar.app.AppEvent;import com.idonoo.shareCar.app.IntentExtra;import com.idonoo.shareCar.ui.main.MainSlideContent;import com.idonoo.shareCar.uiframe.BaseActivity;import com.idonoo.shareCar.vendor.share.ShareHelper;import com.umeng.analytics.MobclickAgent;public class WebViewActivity extends BaseActivity {private WebView webView;private WebUrlType urlType;private String webTitle="";private String webDesption="";private String webUrl="";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.layout_web_view);initUI();initData();}@Overrideprotected void initUI() {super.initUI();preListener=new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}};super.initActionBar();webView=(WebView)findViewById(R.id.webView);}@Overrideprotected void initData() {webUrl=getIntent().getStringExtra(IntentExtra.EXTRA_URL);urlType=(WebUrlType) getIntent().getSerializableExtra(IntentExtra.EXTRA_URL_TYPE);if(TextUtils.isEmpty(webUrl)){finish();return ;}parseWebUrlType(urlType);webView.getSettings().setJavaScriptEnabled(true);webView.addJavascriptInterface(new JsInterfaceBody(this), "intbird");//添加和js的结合WebViewClient viewClient = new WebViewClient(){@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);dismissProgress();webUrl=url;onPageLoadFinish(url);}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);showProgress("");webUrl=url;onPageLoadStart(url);}};webView.setWebViewClient(viewClient);WebChromeClient client=new WebChromeClient(){@Overridepublic void onReceivedTitle(WebView view, String title) {super.onReceivedTitle(view, title);parseWebUrlTitle(title);setTitle(webTitle);}};webView.setWebChromeClient(client);webView.loadUrl(webUrl+"?visitTimes="+System.currentTimeMillis());webView.setDownloadListener(new DownloadListener() {@Overridepublic void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype, long contentLength) {webView.goBack();Uri uri = Uri.parse(url);              Intent intent = new Intent(Intent.ACTION_VIEW, uri);              startActivity(intent);}});}protected void onPageLoadStart(String url) {}protected void onPageLoadFinish(String url) {doMobileAgentent(url);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(webView.canGoBack()){webView.goBack();return true;}else{Activity act = getParent();if(act != null&&act instanceof MainSlideContent){return ((MainSlideContent)getParent()).onKeyDown(keyCode, event);}}return super.onKeyDown(keyCode, event);}private View.OnClickListener viewShareAction =new View.OnClickListener() {@Overridepublic void onClick(View v) {ShareHelper.Builder helper=new ShareHelper.Builder(getActivity());helper.setShareToAll(true).setTitle(webTitle).setContent(webDesption+webTitle+webUrl).setClickUrl(webUrl).setImageRes(R.drawable.i_png_logo_share).create().show();}};private void doMobileAgentent(String url) {if(url.contains("?")){try{url=url.substring(0,url.indexOf("?"));}catch(Exception ex){}}HashMap<String, String> maps=new HashMap<String, String>();maps.put("openUrl", url);MobclickAgent.onEvent(getActivity(), AppEvent.WEB_URLS_IN_APP,maps); }}


JsInterfaceBase

public abstract class JsInterfaceBase {public abstract void  result_response(boolean result);public abstract void  login_register();public abstract void  author_user(int auhotType,int authorResult);public abstract void  order_details_passager(String orderNo);public abstract void  order_details_driver(String orderNo);public abstract void  route_details(String orderNo);public abstract void  carneeds_publish();public abstract void  carneeds_list_main();public abstract void  carneeds_list_nearby();}


JsInterfaceBody

private Context mContext;public JsInterfaceBody(Context context){this.mContext=context;}public JsInterfaceBody(){}private Context getActivity(){if(null == mContext){mContext = Frame.getInstance().getAppContext();}return mContext;}private void startActivity(Intent intent){getActivity().startActivity(intent);result_response(true);}@Override @JavascriptInterfacepublic void result_response(boolean result) {JsInterfaceHtml.notifyResult(result);}@Override@JavascriptInterfacepublic void login_register() {Intent intent=new Intent(getActivity(),LoginWellcome.class);startActivity(intent);}@Override @JavascriptInterfacepublic void author_user(int authorType,int authResult) {if(!isLogin()){login_register();}else{Intent intent= null; switch(authResult){ case 1: intent = new Intent(getActivity(),UserCenterActivity.class); break; case 2:intent = new Intent(getActivity(),PassagerAuthor.class); break; case 3:intent = new Intent(getActivity(),AddDriverCommonRoutes.class); break; case 4: intent = new Intent(getActivity(),ToBeOwerUploadDriver.class); break; case 5:intent = new Intent(getActivity(),ToBeOwerUploadDrivring.class); break; case 6:intent = new Intent(getActivity(),LoginFromOldDriver.class); break; } if(intent != null) intent.putExtra(IntentExtra.EXTRA_IS_AUTHOR_REFUSE,true); startActivity(intent);}}
下略....


网页端负责

<html><head><script type="text/javascript">function responseApp(var result){ document.getElementById("content").innerHTML = result;alert("dialog");}</script></head><body><span id="content"></span><a onClick="window.intbird.login_register()" href="";></a><p/><a onClick="window.intbird.author_drirver()" href="";></a><p/><a onClick="window.intbird.author_passager()" href="";></a><p/><a onClick="window.intbird.order_details_passager(120)" href="";></a><p/><a onClick="window.intbird.order_details_driver(120)" href="";></a><p/><a onClick="window.intbird.route_details(120)" href="";></a><p/><a onClick="window.intbird.carneeds_publish()" href="";></a><p/><a onClick="window.intbird.carneeds_list_main()" href="";></a><p/><a onClick="window.intbird.carneeds_list_nearby()" href="";></a><p/></body></html>






1 0
原创粉丝点击