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页面上过来的URLUri
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做把控
Android Scheme调起:安全与控制
本文介绍了Android外部调起应用的两种方法:通过Scheme和Service。详细讲解了如何配置AndroidManifest.xml,以及在WebApp中如何调用。同时强调了在调起后加载URL时的安全问题,提醒开发者需要对传入的URL进行过滤和控制,防止被第三方篡改导致意外页面访问。
1487

被折叠的 条评论
为什么被折叠?



