首页 新闻 会员 周边

关于Intent-filter的目的想请教下

0
悬赏园豆:20 [待解决问题]

     以前做的东西都是在一个进程内的,基本没用到Intent-filter,今天在自学的时候遇到了垮进程访问service的需求,由此联想到了一些应用比如QQ的通过QQ消息直接打开腾讯新闻的Activity之类的功能,所以有了以下疑问。

     先说下我理解的:Intent-filter是为了让Intent在实现隐式意图的时候,查找到合适的对象(Activity,Service,BroadcastReceiver),所设置的过滤机制。我个人猜测,当我们发动一个隐式意图时,系统会查找所有已安装的包,找到符合我们意图的组件,将其激活。这个查找方式嘛,应该是先通过指定的action过滤,然后通过指定的category过滤,最后通过data过滤(可能是不分顺序,反正三者都要通过)。

    接下去说下问题:

1.这个category属性 是否只是为了做二重过滤使用,假设我所有的action都使用不同名字,那category得存在就没有意义了?还是说,这其实是一种安全机制,防止别的应用随意调用你的组件?还是说,这其实是为了使代码实现复用,当多种情况使用同一组件时,可以通过判断发送者即category的不同,实现不同功能?

2.在设置了Intent-filter后,该如何保证自己的组件不被别人调用?

3.在我自己的应用内调用另外一个进程的组件时,我是自己通过给intent赋值适当的过滤条件来达到目的的。但是类似音乐播放器之类的应用,当你打开一个音乐文件时,系统会弹出选择框让你选择应用来播放,一些文本查看器软件也有类似功能。我想知道,这是不是操作系统本身帮你封装了“打开音乐文件”和“打开文本文件”这一操作,使其相当于发送了一个Intent。类似的,当我们在自己的应用内调用打电话功能,

Intent intent = new Intent(
Intent.ACTION_CALL, Uri.parse("tel:10010")

其实也就是调用了操作系统定义好的一个打电话的组件。

林J的主页 林J | 菜鸟二级 | 园豆:202
提问于:2013-11-19 15:13
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册