android js 启动拨号,Android中如何通过Js唤起Activity

通过网页唤起一个app这样的场景有很多, 我们来看看如何实现这样的一个功能.

通过html启动Activity的原理是js代码运行了URL去匹配对应的Activity. 我们可以通过配置Activity的intent-filter来匹配一个URL.

android:host="eric.com"

android:scheme="schemedemo"

/>

data部分就是在构造一个匹配的Url, 启动比较常用的几个字段:

一个网址:https://zhidao.baidu.com:8080/question?name=google&page=1

scheme : 协议名,如同上面的 https.

host : 域名,zhidao.baidu.com

port : 端口号

parh : 路径 , question

query parameter : 查询参数,name=google&page=1

这里Activity的data部分你都可以自定义,以达到唯一匹配,下面我们来看看如果通过js代码启动它.

这里我们通过WebView去加载一段html, 从html跳转一个指定Activity来示范一下.

先完成一段启动该Activity的Js代码

WEB唤起原生APP

Simple Launch with parameters

(function(){

var ua = navigator.userAgent.toLowerCase();

var t;

var config = {

/*scheme:必须*/

scheme_IOS: 'schemedemo://',

scheme_Adr: 'schemedemo://eric.com/test/scheme?name=google&page=1',

download_url: document.getElementById('download-app').value,

timeout: 600

};

function openclient() {

var startTime = Date.now();

var ifr = document.createElement('iframe');

ifr.src = ua.indexOf('os') > 0 ? config.scheme_IOS : config.scheme_Adr;

ifr.style.display = 'none';

document.body.appendChild(ifr);

var t = setTimeout(function() {

var endTime = Date.now();

if (!startTime || endTime - startTime < config.timeout + 200) {

window.location = config.download_url;

} else {

}

}, config.timeout);

window.onblur = function() {

clearTimeout(t);

}

}

window.addEventListener("DOMContentLoaded", function(){

document.getElementById("call-app").addEventListener('click',

openclient, false);

}, false);

})()

下面再来在webview中加载该js

public class MainActivity extends AppCompatActivity {

private WebView mWebView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mWebView = findViewById(R.id.web_view);

mWebView.loadUrl("file:///android_asset/callback.html");

}

}

注意我的html文件放在了这里

format,png

SchemeActivity这个画面布局如下

public class SchemeActivity extends AppCompatActivity {

TextView tv_data;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_scheme);

tv_data = findViewById(R.id.tv_data);

Uri uri = getIntent().getData();

StringBuilder sb = new StringBuilder();

// 唤起链接

sb.append("string : ").append(getIntent().getDataString()).append("\n");

sb.append("scheme : ").append(uri.getScheme()).append("\n");

sb.append("host : ").append(uri.getHost()).append("\n");

sb.append("port : ").append(uri.getPort()).append("\n");

sb.append("path : ").append(uri.getPath()).append("\n");

// 接收唤起的参数

sb.append("name : ").append(uri.getQueryParameter("name")).append("\n");

sb.append("page : ").append(uri.getQueryParameter("page"));

tv_data.setText(sb.toString());

}

}

启动该webview的工程.

format,png

接着点击Simple Launch with parameters按钮,就会通过URLschemedemo://eric.com:8080/test/scheme?name=google&page=1匹配到SchemeActivity, 并实现跳转.

format,png

最后

在现在这个金三银四的面试季,我自己在网上也搜集了很多资料做成了文档和架构视频资料免费分享给大家【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

资料获取方式:加入Android架构交流QQ群聊:513088520 ,进群即领取资料!!!

点击链接加入群聊【Android移动架构总群】:加入群聊

96da6e6c2803f3663dd004eff0e12673.png

标签:uri,Js,Activity,var,sb,Android,scheme,append

来源: https://blog.csdn.net/weixin_43351655/article/details/89475547

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值