Android Webview通过链接跳转第三方APP或者跳转下载第三方APK

最近在混合开发中遇到一个问题,这里将问题及解决方案记录如下:

问题:

       现在有这么个需求,webview中加载了一个H5界面(第三方应用提供的界面,如嵌入一个淘宝商品界面),在界面中有个按钮,点击时需要跳转到第三方APP中的相关界面,假如本地未安装则跳转去下载(可以自行设计下载方式,如直接跳转浏览器,或者自定义下载界面)。因为是第三方提供的H5界面链接,所以我们未知其实现逻辑,在接入的过程中发现点击按钮没有任何反应,既不会跳转去下载,也不会唤起对应的第三方APP应用。。。

解决方案:

       经一番sou sou 搜,发现Android的WebView自身是支持网页唤起第三方App的,但是如果为WebView设置了自定义的WebViewClient,这个功能就失效了,另外我们没有做特别处理的话,webview不会直接下载对应的apk,所以需要我们对这种场景做处理。

       (1)首先我们在WebViewClient的shouldOverrideUrlLoading(WebView view, String url) 方法中搞事情。


       上面代码也很简单,就是对自定义的scheme做拦截直接跳转唤起第三方APP,假如本地没有安装则会抛如下异常

System.err: android.content.ActivityNotFoundException: 

                  No Activity found to handle Intent { act=android.intent.action.VIEW ....},我们try-catch就可以了,这是标识字段isDownload仍然是初始值true,这样就可以继续搞事情了。

       (2)然后我们又可以通过webview的setDownloadListener(DownloadListener listener)方法搞事情。


       以上代码通过判断isDownload字段是否为true来跳转浏览器进行下载操作。

       那可能有人会问为什么要设置isDownload字段呢?为什么在shouldOverrideUrlLoading做设置,在setDownloadListener中做判断管用呢?这个问题看一下如下的日志就知道了。



图中:1 后面对应的链接为待唤起APP对应的url;  2  处是调用webview的setDownloadListener方法。

由图我们可以看出来setDownloadListener方法在最后才会执行,所以这就是上面问题中为什么在shouldOverrideUrlLoading做设置,在setDownloadListener中做判断管用的原因。至于isDownload字段的作用是为了防止本地已经安装了待唤起的第三方APP,程序在执行时仍会走setDownloadListener监听,又一次跳转浏览器提醒用户下载,通过这么控制提升用户体验。

总结一下,开篇说到的问题解决方案我们可以归结两点:

(1)在WebViewClient的shouldOverrideUrlLoading中拦截url唤起第三方APP,假如本地未安装时try-catch异常,

(2)同时通过webview的setDownloadListener设置下载监听,并设置下载标识,只有链接是下载链接时才会走回调,我们可以在回调中进行下载操作。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容