android启动程序唤起其它app,安卓和rn唤起其他app应用

对于app来说,很多时候都需要在本app中唤起其他app应用,本文简单的列举了安卓和react-native对于唤起其他app的一些做法。

安卓

1)url scheme唤起

使用场景:

h5页面跳转到app;

一个app跳转到另一个app;

app内的跳转;

具体形式:

安卓的url唤起其实是采用了url scheme方式唤起,该方式和平常的url的结构基本一致;

scheme://host:port/pathname?querystring;

// 注意这里的scheme不是http护着https;

// demo:

test//baidu.com:9001/a/b?a1=1&a2=2

调用方式:假设A应用调用B应用;

在B应用的AndroidManifest.xml文件中定义相关配置:

bVbDetX

B应用获取跳转过来的参数:

Intent intent = getIntent();

String action = intent.getAction();

String scheme = intent.getScheme();

Set categories = intent.getCategories();

Uri data = intent.getData();

data.getHost();

data.getPath();

data.getPort();

A应用如果是网页:

xxx

window.location = "test://baidu.com:9001/a/b?...";

A是一个app应用:

首先要知道B应用的url scheme的叫什么,然后再调用startActivity唤起;

Uri uri = Uri.parse("test://baidu.com:9001/a/b?a1=1&a2=2");

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

优点:不暴露包命;

缺点:host path schemeA应用和B应用得规定死;

2)ComponentName唤起:

作用:就是用来定义一个应用程序组件,目的就是为了让app之间进行互相跳转;

用法:

step1:创建一个应用类组件--- new ComponentName(string pkg, string classname);其中

pkg:就是AndroidManifest.xml中manifest组件定义的package的包名;

classname:就是xml文件中activity组件定义的android:name的类名;

step2:创建一个意图Intent,然后添加组件到意图中;

Intent intent = new Intent()

intent.setComponent(intent)

step3:最后一步就是启动另一个应用 ---- startActivity(intent)

demo:

Intent intent = new Intent(Intent.ACTION\_MAIN);

/**知道要跳转应用的包命与目标Activity**/

ComponentName componentName = new ComponentName("kuyu.com.xxxx", "kuyu.com.xxxx.xxx.login.WelcomeActivity");

intent.setComponent(componentName);

intent.putExtra("", ""); //这里Intent传值

startActivity(intent);

RN

rn可以通过Linking这个组件来唤起其他app应用(前提要知道对应app应用的url scheme),他主要提供了三个主要的api调用:

1.canOpenURL(url):判断当前url scheme是否在安卓机器上有安装过;

Linking.canOpenURL('weixin://')

.then(isSupport => { ... })

.catch(e => {...})

2.openURL(url):在安卓上打开指定的url scheme的app应用;

Linking.canOpenURL('weixin://')

.then(isSupport => {

if (isSupport) {

return Linking.openURL('weixin://');

} else { ... }

}).catch(e => {...})

注意:本方法会返回一个Promise对象。如果用户在弹出的对话框中点击了确认或是 url 自动打开了,则 promise 成功完成。如果用户在弹出的对话框中点击取消或是没有对应应用可以处理此类型的 url,则 promise 会失败。

3.getInitialURL():如果本应用被另一个应用调用时,会返回相应的连接地址;

genInitialURL().then(url => {...}).catch(e => {...});

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值