Android 通过 Intent Filter 和 scheme 实现与js交互,也称为 deep-link

达到点击网页按钮打开App效果

参考

参考链接

实现

接下来结合具体的代码进行解析

首先来看 网页端 js的实现

按照stackoverflow上的说法,js中应该有一个类似于下面的结构

来看一下js的代码

其中可以看到这种结构,
scheme为shopal-c
host为 www.ushopal.com
path为product/detail ,campaign/detail,discount/detail等。
parameter为post_id,post_type,post_link等。

这是js这边要进行的操作,而Android本地是通过Intent Filter来设置的。

Android本地代码

          <activity            android:name=".activity.MainActivity"            android:launchMode="singleTask"            android:screenOrientation="portrait">            <intent-filter>                <action android:name="android.intent.action.VIEW" />                <category android:name="android.intent.category.DEFAULT" />                <category android:name="android.intent.category.BROWSABLE" />                <data android:scheme="shopal-c" />            intent-filter>        activity>

其中可以看到这个配置与js中的scheme是对应的。

这样就可以根据scheme在js中唤起app。

注意

唤起app之后首先就会进入配置了 配置了对应Intent Filter的Activity,这里需要注意一点:Activity的启动方式。

这里的目标Activity是singleTask模式,是不能重复创建的。

首先看一下 在Activity声明周期中进行的处理

onCreate

        Intent intent = getIntent();        String action = intent.getAction();        schemeOperate = new SchemeOperate();        if (Intent.ACTION_VIEW.equals(action)) {            String url = intent.getDataString();            if (url != null) {                schemeOperate.operate(this, url, new MainSearchBean());            }        }

如果用户是点击应用图标进入的Activity,而不是通过scheme跳转的,那么intent.getAction的值是null,所以这里需要判断一下。

如果目标Activity处于任务栈的栈顶,那么通过scheme跳转过来的时候执行的生命周期也是onCreate

生命周期:
onCreate
onStart
onResume

onNewIntent

        String action = intent.getAction();        if (Intent.ACTION_VIEW.equals(action)) {            String url = intent.getDataString();            if (url != null) {                schemeOperate.operate(this, url, new MainSearchBean());            }        }

因为目标Activity是singleTask,所以当目标Activity (1)已经被创建,(2)不是在栈顶,那么通过scheme跳转到目标Activity是不会执行onCreate方法的,而是执行onNewIntent生命周期。

生命周期:
onNewIntent
onRestart
onStart
onResume

更多相关文章

  1. 10个Android项目
  2. android http post请求
  3. Android日期时间格式国际化的实现代码
  4. Android通过代码获取ROOT权限
  5. Android(安卓)WIFI模块解析
  6. Android原生webview打开支付宝
  7. Android开机自启动服务的实现方法
  8. Android(安卓)系统自动实现开机启动
  9. Android(安卓)Studio系列教程三--快捷键

随机推荐

  1. Android内存管理的原理--进程管理
  2. 学习Android自己的第一个应用
  3. Android、iPhone和Java三个平台一致的加
  4. android 笔记 --- Android自动判断输入是
  5. Handler和Message的使用之三
  6. Android菜鸟进阶之路 TextView的使用
  7. Android代码混淆防反编译解决方案研究
  8. Android(安卓)Button控件的使用
  9. Android开发人员应避免的10个误区
  10. 一个简单的demo学习Android远程Service(AI