Android_Intent和intent-filter的关系

时间:2021-03-25 15:34:53

@作者 : 西野奈留
@博客:http://blog.csdn.net/narunishino
-2016/4/01-


启动者:

如果我们需要在Activity或Service或BroadcastReceiver(以下简称ASB)启动其他ASB的时候,我们要指定一些条件,来启动我们想要启动的ASB(因为有很多其他ASB,不指定的话,系统也不知道你想启动哪个)。//忽略new Intent(this,Xxx.class)这种情况。
于是就有了:

  • intent.setComponent(); //基本上不用这个。
  • intent.setAction(“narunishino”);
    • 一个ASB只能set一个action。
    • setActio()的参数为字符串,android给了很多Action常量来启动系统组件。
  • intent.addCategory();
    • 可以add多个category。
    • 如果不添加addCategory()方法的话,系统会自动添加一个默认的category给intent。
    • addCategory()的参数为字符串,android给了很多Category常量来使用一些系统功能(我暂时还不清楚怎么用)。
  • intent.setData();
    • 用于向Action提供操作的数据。
    • 参数是Uri对象,例:
      • Uri格式为:scheme://host:port/path
      • intent.setData(Uri.parse(“lee://www.fkjava.org:8888/test”));
  • intent.setType();
    • 与setData()互斥。
    • 但是可以通过setDataAndType()设置在一起。
  • intent.addFlag();
    • 添加的是Activity启动模式。

被启动者:

那么其他这些将要被启动的ASB就得在Manifest的自己的<intent-filter>中指定如下属性来告诉系统自己能响应哪些请求(启动):

  • Action属性:<action android:name=”自己写个字符串上去”/> //可以写多个action(来响应不同请求)。
    • 所有包含<action android:name=”narunishino”/>的ASB都会跳出来给用户选。
  • Data属性:<data android:scheme=”” android:host=”” .......... />
    • <data />中定义了某些参数(设置多少由自己定),启动者(可以设置比被启动者更多的参数)中必须设置了同样的参数才能打开这个ASB(就是说uri中需要包含相同的参数)
  • Type属性:<data android:mimeType/> (是写在data里面的)

总结:我很少用到data和type,所以暂时了解不深。


-End-