有两种方法:
1、HTML链接处理
首先做成HTML的内容,url格式如下:
<a href="[scheme]://[host]/[path]?[query]">点我a>
说明:
schema: 判断启动的App
host: 标记
path: 标记,可无
query: 传值的(key,value)键值对,可无
例如:
启动应用程序
本例中做如下超链接跳转:
<a href="finance://pay.com/mpos?orderId=1020160126"> Open APP a>
其中:
schema —- finance 对应Android中 android:schema
host --- pay.com 对应android中 android:host
path --- mpos 对应android中 android:pathPrefix
query --- orderId=1020160102 为Html链接和APP相互传递的数据,可以在Uri中通过getQueryParameter 方法获取
全部Html源码:
<html>
<head>
<meta charset="UTF-8">
<title>mpostitle>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0">
<meta name="imagemode" content="force">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
head>
<body>
<h1>H5打开APPh1>
<a href="finance://pay.com/mpos?orderId=102016000"> Open APP a>
body>
html>
2、android中如何处理?
1)在AndroidManifest.xml文件中,在需要跳转到的Activity中添加如下声明:
<activity
android:name=".ui.activity.OrderDetailActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/CustomTitle">
<intent-filter>
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.VIEW" />
<data
android:host="pay.com"
android:pathPrefix="/mpos"
android:scheme="finance" />
intent-filter>
activity>
2)如何获取链接中传递的数据?
if (getIntent() != null) {
if (Intent.ACTION_VIEW.equals(action)) {
Uri uri = Uri.parse(getIntent().getDataString());
if (uri != null) {
String orderId = uri.getQueryParameter("orderId");
}
}
}
3、应该注意的地方?
1)链接打开的Activity中,【android.intent.action.MAIN】和【android.intent.category.LAUNCHER】这2个,不能与这次追加的内容混合在一起;如果跳转的刚好是启动Activity,可以写一个类继承启动类。
2)参考:http://blog.csdn.NET/jiangwei0910410003/article/details/23940445
1、WebView基础设置如下:
String mUrl = "http://10.0.41.19:8099/TomcatTest/web_app_upload_image.html";
WebSettings webSettings = webView.getSettings();
//设置WebView属性,能够执行Javascript脚本
webSettings.setJavaScriptEnabled(true);
//设置可以访问文件
webSettings.setAllowFileAccess(true);
//设置支持缩放
webSettings.setBuiltInZoomControls(true);
//加载需要显示的网页
// 加载 asset目录下的本地html文件: mUrl = "file:///android_asset/web_app.html"
webView.loadUrl(mUrl);
//设置WebViewClient用来辅助WebView处理各种通知请求事件等,如更新历史记录、网页开始加载/完毕、报告错误信息等
webView.setWebViewClient(new WebViewClient() {
// 以下方法避免 自动打开系统自带的浏览器,而是让新打开的网页在当前的WebView中显示
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
// 用于辅助WebView处理JavaScript的对话框、网站图标、网站标题以及网页加载进度等
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
tv_title.setText(title);
}
});
// 使 H5可调用Native方法: android.nativeMethod()
webView.addJavascriptInterface(new MyJsInterface(), "android");
2、H5 调用 Native 方法实现 H5页面 按钮点击事件处理,代码如下:
type="button" value="JS Call Native: Toast Message" onclick="android.toastMessage()">
App WebViewActivity类中处理
public class MyJsInterface {
@JavascriptInterface
public void toastMessage(String msg) {
Toast.makeText(WebViewActivity.this, "app to H5 toast " + msg, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(WebViewActivity.this, FirstActivity.class);
WebViewActivity.this.startActivity(intent);
}
3、Native 传递数据给 H5,场景:点击原生页面的标题栏按钮,给H5页面传值 并且更新 H5页面:
// 点击原生按钮,向H5页面发送数据,可更新H5页面
tv_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = "from Native";
// loadUrl必须在主线程中执行
webView.loadUrl("javascript:toNative('" + msg + "')");
}
});
H5 中页面数据更新代码:
<input type="text" value="hhhh" id="pp"/>
<script type="text/javascript">
// 2. js供 Native 调用的方法
function toNative(msg) {
alert("Hello, from H5, received msg: " + msg);
var p = document.getElementById("pp");
p.value = msg;
}
script>