通过浏览器打开本地Activity

今天偷偷懒,把以前的工作笔记,略加装饰发出来,没办法没啥时间啊...


首先要明确 任何一个浏览器链接都是一个隐式意图

大家是否遇到过,点击浏览器的某个文字或者按钮或者图片就回去打开本地的应用?


按理说浏览器只是用来打开网页的,为什么可以去打开应用呢?这就要归结于我前面说的,任何一个浏览器的链接都是一个隐式意图,我们知道打开activity的两种方式隐式意图和显示意图,所以....浏览器的链接就是隐式意图,那么我们配置应用的过滤器不就可以了?

之前的项目有个需求,希望浏览器打开微信分享我们活动的页面,就能打开我们的app,这个大家玩开心消消乐,每天三次分享到朋友圈,点击朋友圈跳转到浏览器打开了这个链接获取金币..此时重点来了  浏览器会提示你是否打开一个外部应用,你点是就会回到开心消消乐的应用,而我们的需求与这个并无太大差异


首先是配置app的过滤器

		<category android:name="android.intent.category.BROWSABLE" />  //必须配置,重点,这个表示可以通过浏览器打开的类型应用
                <category android:name="android.intent.category.DEFAULT" />  
                <action android:name="android.intent.action.VIEW" />  

然后配置data(可以配置多条,从而响应各种链接唤起应用)

		<data android:scheme="http" android:host="www.baidu.com"  /> //scheme配置协议 host配置主机 还可以配置路径pathprefix
                <data android:scheme="http" android:host="m.baidu.com"  />
当然通过隐式意图打开的应用我们同样可以拿到隐式意图携带来的数据
Intent intent = getIntent();  
Uri uri = intent .getData();  
  
String xxx= uri.getQueryParameter(键值);  
String xxx= uri.getQueryParameter(键值);  
   

当然了浏览器可以给应用携带数据,自然应用也可以给浏览器页面携带数据(我这里指的是给浏览器页面而不是浏览器),这里就要涉及到安卓的java代码与浏览器页面JS之间的交互了,这个现在不做重点

咳咳,忘记说了以上只针对安卓原生浏览器,像第三方的浏览器是不起作用的,可能是因为安全考虑被拦截了吧.

但是现在的浏览器基本都是第三方的吧,那你上面说的岂不是都是废话?打不开app我还get这个技能干什么?

莫慌莫慌,小兄弟,听我慢慢道来,开心消消乐我也玩过,我也是分享到UC浏览器但是却可以打开开心消消乐呀,为什么自己写的Demo却无法被吊起呢? 

为此,我又去下载了开心消消乐...


打开消消乐的分享页面,查看源代码,貌似并没有找到关键性代码,很普通的html页面地址奉上

http://animalmobile.happyelements.cn/winter_week_match_2016_qr_code.html?uid=1304178408&invitecode=4705694397&pid=360&action=1&index=6&ts=1489161353000&qrid=1304178408X2X1489161351000&from=groupmessage


但是重点实在js代码中去实现的,奉上地址

http://animalmobile.happyelements.cn/js/activity_3.js


进里面翻翻,咦,貌似看到一个很熟悉的东西,源码奉上

openAppInChrome: function () {
        var intent = "intent://xxl.happyelements.com#Intent" +
            ";scheme=" + activity.redirect.openAppHref +
            ";package=com.happyelements.AndroidAnimal" +
            ";S.browser_fallback_url=" + encodeURIComponent(activity.redirect.officialHref) +
            ";end";
        location.replace(intent);
    },

是不是超级熟悉的关键字? 包含了intent scheme package Android 具体实现原理,因为暂时不懂,不过以后会自学H5,之后会回来介绍这段js代码的含义,目前知道是通过js代码唤起应用即可...感谢观看.谢谢大家

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值