android 外部调起要注意的地方——是否需要控制访问host

1.外部调起的实现方式

 外部调起通常我们需要再某个activity上配置相应的data参数即可实现外部调起。


第一,在AndroidManifest.xml中对<activity />标签增加<intent-filter />,如下:

<!--用这个Activity专门处理本App调起的情况-->
< activity  android:name = "com.baidufe.shemedemo.SchemeActivity"
           android:label = "@string/app_name" >
     <!--要想在别的App上能成功调起App,必须添加intent过滤器-->
     < intent-filter >
         <!--协议部分,随便设置,这部分是否要匹配这么多项,要根据自己的情况来设置-->
         <data android:scheme="mysheme"
		android:host="myhost"
		android:pathPrefix="/open"
/>
         <!--下面这几行也必须得设置-->
         < category  android:name = "android.intent.category.DEFAULT" />
         < action  android:name = "android.intent.action.VIEW" />
         < category  android:name = "android.intent.category.BROWSABLE" />
     </ intent-filter >
</ activity >

第二,在SchemeActivity中接收并处理Uri请求,实现跳转到不同的Native App页面,获取Uri可以在Activity中通过getIntent().getData()实现,Demo:

// 尝试获取WebApp页面上过来的URL
Uri uri = getIntent().getData();
然后就可以从uri中获取path等信息

第三,在WebApp页面上,通过如下方式使用:

<!-- 注意这里的href格式 -- >
< a  href = "mysheme://myhost/open/info?id=10000" >open baidufe android app</ a >

上面的链接看起来和平时看到的链接是不一样的,myscheme:// 这个协议是被注册到android app中的,整个格式都是我们自定义的,当然,也可以改成任意的样子,比如:com.myscheme://a/b/c 。只不过,这个Uri的格式需要提前定义好,要不然在SchemeActivity中无法匹配上。在SchemeActivity中,可以获取到这个Uri,并分段解析,进而启动不同的Activity,实现从WebApp中跳转到Native App的不同页面。


当然,还有一种方法,是通过注册service,并通过ServerSocketChannel去bind一个端口,比如9999,启动该service后,即可在WebApp中通过 http://127.0.0.1:9999 进行访问,当然,根据service的不同实现,可以在后面加一定的path和query,比如:http://127.0.0.1:9999/dealIntent?intent=....&callback=.... 。这种方式比scheme更灵活,但缺点也是很明显的:service长期处于启动状态,耗电是必须要考虑的。



2.如果唤起后加载的是传过来的url,那么此时要注意做下控制了

比如我们的url是myscheme://myhost/open?url=http://www.baidu.com,如果url被第三方换成了他们的url,那么外部唤起有可能访问的就是别人的页面了。所以如果有这种需求的话,要做过滤处理,对url做把控

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值