最近,在使用QQ和微信等SDK来实现分享网页的时候,发现,SDK已经为页面跳转回应用提供了基本的数据支持。我们只需在应用里和被分享的网页进行简单的设置,即可实现此功能。

那么我们先来看下网页跳转回应用的实现原理。

就Android平台而言,URI主要分三个部分:scheme, authority and path。其中authority又分为host和port。格式如下: 
scheme://host:port/path 
举个实际的例子: 
content://com.example.project:200/folder/subfolder/etc 
\---------/  \---------------------------/ \---/ \--------------------------/ 
scheme                 host               port        path 
                \--------------------------------/ 
                          authority

现在大家应该知道data flag中那些属性的含义了吧,看下data flag 
<data android:host="string" 
      android:mimeType="string" 
      android:path="string" 
      android:pathPattern="string" 
      android:pathPrefix="string" 
      android:port="string" 
      android:scheme="string" />

以下是测试示例的实现步骤:

1. 新建一个工程A,并实现一个Activity,用来接收外部的跳转。代码如下:

public class JumpActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);Intent intent = getIntent();String data = intent.getDataString();System.out.println(data);}}

在这个Activity里,我们可以通过getIntent(),来获取外部跳转传过来的信息。

2.  修改ManiFest文件,设置Activity的接收Action的属性,代码如下:

        <activity android:name=".JumpActivity" ><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><dataandroid:host="data"android:scheme="sharetest" /></intent-filter></activity>

如上所示,在data里设置了 scheme和host,则该Activity可以接收和处理类似于 "sharetest://data/XXX"的链接。

3. 接下来我们可以写一个测试工程B,看看工程A中的JumpActivity是否可以接收和处理类似于 "sharetest://data/XXX"的链接。因此,新建一个工程B,工程里只有一个WebView,用来打开一个本地的网页。由于WebView在接收到自己不能处理的Uri时,会自动的调用发送Intent来调用能够处理该Uri的应用。

以下是网页的代码:

<!DOCTYPE html>
<html>
<body>
<iframe src="sharetest://data/123" style="display:none"></iframe>
</body>
</html>

将该网页放到Assets目录下,在代码里调用Webview加载该Html文件,代码如下:

    public void loadHtml(){WebView webview = new WebView(this); WebSettings wSet = webview.getSettings(); wSet.setJavaScriptEnabled(true);webview.loadUrl("file:///android_asset/a.html");  setContentView(webview);}

4. 将手机装上工程A和工程B。打开工程A,可以发现:工程B的JumpActivity会自动被打开。如下图所示:在Intent中可以去到网页里发出的链接:sharetest://data/123。

因此,我们就可以在JumpActivity里处理接收到的消息了。

通过以上的4步,相信大家都了解如何让应用接收和处理某种Uri消息。因此,只要我们

1. 在ManiFest里为Activity申明接收并处理某种Uri

2. 在页面中添加以下代码:其中,l为符合Activity处理规则的Uri地址。

<iframe src="l" style="display:none"></iframe>

就可以让已安装该应用的用户在打开该网页的时候,自动的跳转到应用内部。

点击微信和QQ分享跳转到程序内部的原理与此一致。

Android 从网页中跳转到APP相关推荐

  1. Android从网页中跳转到APP

    一.首先要在AndroidManifest.xml中设置一下过滤器,以JumpActivity为例: <activity android:name=".JumpActivity&quo ...

  2. android uri跳转导航,android:scheme 通过uri跳转到APP应用指定Activity

    [实例简介] android:scheme 通过uri跳转到APP应用指定Activity [实例截图] [核心代码] 9a220ee4-08be-464b-a16e-dd9475dca846 └── ...

  3. Android通过DeepLink方式跳转其他App传递参数

    网上对于安卓DeepLink方式跳转传递参数的例子较少,说的也不客观,实践之后发现还是有一些坑.其实为什么要用DeepLink方式跳转,有些是因为引流的原因,他们希望通过网页就能直接跳转到App的界面 ...

  4. ios html转换成网页,ios App加载本地HTML网页,点击网页链接跳转到app页面的方法

    一.如何在APP里加载本地html文件内容: 首先准备一个html文件,比如内容如下: title go to app 接下来,在APP里定义一个UIWebView,用来显示html文件内容: //定 ...

  5. 在android的webview中跳转到微信支付和支付宝app支付

    @Override public boolean shouldOverrideUrlLoading(WebView view, String url) {// 如下方案可在非微信内部WebView的H ...

  6. 使用Intent协议在webview中跳转三方app

    最近项目上有个需求,是关于在webview加载一个url的形式使用Intent协议跳转到指定的app页面,查看Intent源码发现Intent.parseUri()方法的第二个参数flag有三种类型: ...

  7. Android 如何禁用scheme跳转其他app

    混合APP 打开页面自动跳转 tbopen://m.taobao.com- 页面访问的时候,基类的初始化方法里面判断,如果URL是 tpopen://开头的,则不跳转

  8. android启动微信应用程序,android 从微信分享的网页中启动APP

    项目中有个需求,让用户可以从分享到微信的网页中启动自己的APP,如果本机没有安装该应用程序则打开应用商店并打开该程序在商店中的搜索结果页面.在这里跟大家分享一下: 首先需要和服务端协商好网页中按钮点击 ...

  9. Android内核开发:从源码树中删除出厂的app应用

    本文是<Android内核开发>系列的第十一篇文章,本文重点介绍如何从Android源码中删除出厂的app应用. 上一篇文章中提到过,系统出厂的app应用,其实就是被安装到/system分 ...

最新文章

  1. 看菲菲详解如何快速获取linux命令帮助
  2. nginx 403 forbidden 二种原因
  3. [译]GPU加持,TensorFlow Lite更快了
  4. Goland 这些实操技巧,你可能还不会!
  5. 武汉计算机985211大学有哪些,武汉985211大学有哪些 武汉985211大学有什么
  6. 操作系统原理之内存管理(第四章第二部分)
  7. 数字思维:改变世界的4个方程
  8. android 4.4 keyfactory.getinstance 报错_Android实际开发bug大总结
  9. Spring Cloud Config分布式配置中心高可用及配置刷新(学习总结)
  10. 更深层次的了解计算机,想要对电脑拉力试验机有更深层次的了解,看这里
  11. 测试一枚-记录工作-覆盖率(二)
  12. opencv无法打开摄像头
  13. inkscape:图层
  14. HotSpot GC及参数设置
  15. 人工智能和人类智能的本质区别是什么(五)
  16. SPA 中前端路由基本原理与实现方式
  17. Codeforces Round #787 (Div. 3) F. Vlad and Unfinished Business
  18. 深圳金融展 聚焦明朝万达数据防泄密
  19. 从阿里跳槽来的工程师,写个try catch的方式都这么优雅!
  20. C++中的对齐方式及sizeof小结

热门文章

  1. python数据处理7: matplotlib绘图保存图片深入
  2. 计算机老是卡顿怎么解决,电脑反应太慢怎么处理_电脑卡顿什么原因-win7之家
  3. 在微控制器平台等小型物联网设备上运行 JavaScript
  4. 这11家世界顶级AI初创公司,每个单拎出来都是行业第一
  5. Layui导航栏下拉菜单不显示问题
  6. 用户运营指标体系搭建逻辑
  7. 闪马智能创始人兼CEO彭垚入选2021年度张江杰出人才拟表彰名单
  8. 开源存储这么香,为何我们还要坚持自研?
  9. 微信一次性订阅消息流程
  10. route命令添加永久路由